|   一派护法 十九级 | 
              核心代码备份:【头文件 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;
 }
 
 |