一派护法 十九级              | 
          
            
            
             
              核心代码备份: 【头文件 Dlg1.h】 void Dlg1_Show(HINSTANCE hInst, HWND hWnd); INT_PTR CALLBACK Dlg1(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); void Dlg1_Init(HWND hDlg); void Dlg1_UpdateView(int view); 【源文件 Dlg1.cpp】 #include "stdafx.h" #include <Windows.h> #include <Commctrl.h> #include "resource.h" #include "Dlg1.h"
  struct {     HWND hListBox;     HWND hRadio1;     HWND hRadio2;     HWND hRadio3;     HWND hRadio4;     HWND hRadio5; } ctrls;
  void Dlg1_Show(HINSTANCE hInst, HWND hWnd) {     DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, Dlg1); }
  INT_PTR CALLBACK Dlg1(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {     int wmId, wmEvent;     UNREFERENCED_PARAMETER(lParam);     switch (message)     {     case WM_INITDIALOG:         Dlg1_Init(hDlg);         return (INT_PTR)TRUE;     case WM_COMMAND:         wmId = LOWORD(wParam);         wmEvent = LOWORD(wParam);         switch (wmId)         {         case IDOK:         case IDCANCEL:             EndDialog(hDlg, LOWORD(wParam));             return (INT_PTR)TRUE;         case IDC_RADIO1:             Dlg1_UpdateView(LV_VIEW_ICON);             break;         case IDC_RADIO2:             Dlg1_UpdateView(LV_VIEW_SMALLICON);             break;         case IDC_RADIO3:             Dlg1_UpdateView(LV_VIEW_LIST);             break;         case IDC_RADIO4:             Dlg1_UpdateView(LV_VIEW_DETAILS);             break;         case IDC_RADIO5:             Dlg1_UpdateView(LV_VIEW_TILE);             break;         }         break;     }     return (INT_PTR)FALSE; }
  void Dlg1_Init(HWND hDlg) {     LV_COLUMN lvc;     LV_ITEM lvi;     HINSTANCE hShellInst;     int i, len;     HIMAGELIST hImgListSm, hImgListLg;     HICON hIcon;
      SIZE size = {200, 50};     LVTILEVIEWINFO tileViewInfo;
      LPWSTR columnNames[] = {L"Name", L"Price", L"Number", L"Available"};     const int columnSizes[] = {230, 80, 80, 80};     LPWSTR itemNames[] = {L"Computer", L"Printer", L"Trash", L"Magnifier", L"Lock", L"Hard Drive", L"Scissors", L"Floppy", L"Picture Frame", L"Noteboard", L"Fax", L"Tray", L"Camera", L"CD", L"TF Card"};     const int itemImageIds[] = {16, 17, 32, 23, 48, 166, 16762, 16761, 63001, 16763, 1005, 327, 309, 302, 307};
      ctrls.hListBox = GetDlgItem(hDlg, IDC_LIST1);     ctrls.hRadio1 = GetDlgItem(hDlg, IDC_RADIO1);     ctrls.hRadio2 = GetDlgItem(hDlg, IDC_RADIO2);     ctrls.hRadio3 = GetDlgItem(hDlg, IDC_RADIO3);     ctrls.hRadio4 = GetDlgItem(hDlg, IDC_RADIO4);     ctrls.hRadio5 = GetDlgItem(hDlg, IDC_RADIO5);
      // Init view     tileViewInfo.cbSize = sizeof(tileViewInfo);     tileViewInfo.dwFlags = LVTVIF_FIXEDSIZE;     tileViewInfo.dwMask = LVTVIM_COLUMNS | LVTVIM_TILESIZE;     tileViewInfo.cLines = 2; // Maximum number of text lines in each item label, not counting the title     tileViewInfo.sizeTile = size; // Size of an individual tile     ListView_SetTileViewInfo(ctrls.hListBox, &tileViewInfo);     SendMessage(ctrls.hRadio5, BM_SETCHECK, BST_CHECKED, NULL);     Dlg1_UpdateView(LV_VIEW_TILE);
      // Add columns     lvc.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;     len = sizeof(columnSizes) / sizeof(int);     for (i = 0; i < len; i++)     {         lvc.iSubItem = i;         lvc.pszText = columnNames[i];         lvc.cx = columnSizes[i];         lvc.fmt = LVCFMT_LEFT;         ListView_InsertColumn(ctrls.hListBox, i, &lvc);     }
      // Create ImageList     hImgListSm = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_COLOR32, 1, 0);     hImgListLg = ImageList_Create(GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), ILC_COLOR32, 1, 0);     hShellInst = GetModuleHandle(L"shell32.dll");     len = sizeof(itemImageIds) / sizeof(int);     for (i = 0; i < len; i++)     {         hIcon = LoadIcon(hShellInst, MAKEINTRESOURCE(itemImageIds[i]));         ImageList_AddIcon(hImgListLg, hIcon);         ImageList_AddIcon(hImgListSm, hIcon);         DestroyIcon(hIcon);     }     ListView_SetImageList(ctrls.hListBox, hImgListLg, LVSIL_NORMAL);     ListView_SetImageList(ctrls.hListBox, hImgListSm, LVSIL_SMALL);
      // Add items     lvi.mask = LVIF_IMAGE | LVIF_TEXT;     lvi.iSubItem = 0;     for (i = 0; i < len; i++)     {         lvi.pszText = itemNames[i];         lvi.iImage = i;         lvi.iItem = i;         ListView_InsertItem(ctrls.hListBox, &lvi);     } }
  void Dlg1_UpdateView(int view) {     ListView_SetView(ctrls.hListBox, view); } 【主cpp源文件(部分)】 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {     int wmId, wmEvent;     PAINTSTRUCT ps;     HDC hdc;
      LPCWSTR welcomeStr = L"Welcome to Arslanbar!";     LPCWSTR str2 = L"Please double-click to open the dialog...";
      switch (message)     {     case WM_COMMAND:         wmId    = LOWORD(wParam);         wmEvent = HIWORD(wParam);         // Parse the menu selections:         switch (wmId)         {         case IDM_ABOUT:             DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);             break;         case IDM_EXIT:             DestroyWindow(hWnd);             break;         case ID_FILE_SHOWITEMS:         case ID_ACCELERATOR32772:             Dlg1_Show(hInst, hWnd);             break;         default:             return DefWindowProc(hWnd, message, wParam, lParam);         }         break;     case WM_PAINT:         hdc = BeginPaint(hWnd, &ps);         // TODO: Add any drawing code here...         TextOut(hdc, 4, 4, welcomeStr, wcslen(welcomeStr));         TextOut(hdc, 4, 20, str2, wcslen(str2));         EndPaint(hWnd, &ps);         break;     case WM_DESTROY:         PostQuitMessage(0);         break;     case WM_LBUTTONDBLCLK:         Dlg1_Show(hInst, hWnd);         break;     default:         return DefWindowProc(hWnd, message, wParam, lParam);     }     return 0; }              
                       |