Win32窗口列表控件的被动消息响应
1、手动敲代码,将课堂上的操作流程敲一遍;
2、鼠标右键点击列表控件中的项,弹出提示框,提示当前右键点击的是第几行;
#define _CRT_SECURE_NO_WARNINGS #include <Windows.h> #include <tchar.h> #include <CommCtrl.h> #include <windowsx.h> static TCHAR szWindowClassName[] = _T("WindowClass"); static TCHAR szTitle[] = _T("Title"); HWND hListView_1 = nullptr; UINT IDC_LIST_1 = 200; HWND hEdit_1 = nullptr; UINT IDC_Edit_1 = 300; HWND hButtonControl = nullptr; UINT IDC_BUTTON_1 = 400; LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg,WPARAM wParam,LPARAM lParam) { switch (uMsg) { case WM_CREATE: { hButtonControl = CreateWindow(WC_BUTTON, _T("实现点击按钮就插入一行"), WS_CHILD | WS_VISIBLE | WS_BORDER | BS_PUSHBUTTON, 5, 320, 200, 30, hWnd, (HMENU)IDC_BUTTON_1, NULL, NULL ); hEdit_1 = CreateWindow(WC_EDIT, _T(""), WS_CHILD | WS_VISIBLE | WS_BORDER, 400, 5, 300, 300, hWnd, (HMENU)IDC_Edit_1, NULL, NULL); hListView_1 = CreateWindow(WC_LISTVIEW, (LPTSTR)_T(""), WS_CHILD | WS_VISIBLE | WS_BORDER | LVS_REPORT | LVS_SHOWSELALWAYS, 10, 50, 300, 200, hWnd, (HMENU)IDC_LIST_1, NULL, NULL); ListView_SetExtendedListViewStyle(hListView_1, LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP | LVS_EX_GRIDLINES | LVS_EX_AUTOCHECKSELECT | LVS_EX_AUTOSIZECOLUMNS); LVCOLUMN colInfo = { 0 }; colInfo.mask |= LVCF_WIDTH | LVCF_TEXT | LVCF_FMT; colInfo.cx = 100; colInfo.pszText = (LPTSTR)_T("第0列"); colInfo.fmt |= LVCFMT_RIGHT; //SendMessage(hListCtrl, LVM_INSERTCOLUMN, 0, (LPARAM)&colInfo); ListView_InsertColumn(hListView_1, 0, &colInfo); LVCOLUMN colInfo_2 = { 0 }; colInfo_2.mask |= LVCF_WIDTH | LVCF_TEXT | LVCF_FMT; colInfo_2.cx = 100; colInfo_2.pszText = (LPTSTR)_T("第1列"); colInfo.fmt |= LVCFMT_RIGHT; SendMessage(hListView_1, LVM_INSERTCOLUMN, 1, (LPARAM)&colInfo_2); LV_ITEM row_item = { 0 }; row_item.mask |= LVIF_TEXT; row_item.pszText = (LPTSTR)_T("aaaaaa"); ListView_InsertItem(hListView_1, &row_item); ListView_SetItemText(hListView_1, 0, 1, (LPTSTR)_T("xxxxxx")); } break; case WM_NOTIFY: { NMHDR* pNmHdr = (NMHDR*)lParam; if (pNmHdr->idFrom == IDC_LIST_1) { if (pNmHdr->code == NM_CLICK) { LPNMITEMACTIVATE lpnmitem = (LPNMITEMACTIVATE)lParam; TCHAR szText[128] = { 0 }; _stprintf(szText, _T("点击的是 %d 行,%d 列!"), lpnmitem->iItem, lpnmitem->iSubItem); MessageBox(hWnd, szText, _T("Tip"), MB_OK); } } if (pNmHdr->code == HDN_ENDTRACK) { HWND hListHeader = ListView_GetHeader(hListView_1); if (hListHeader == pNmHdr->hwndFrom) { int nColWidth = ListView_GetColumnWidth(hListView_1, 1); TCHAR szText[128] = { 0 }; _stprintf(szText, _T("第1列的宽度是:%d"), nColWidth); MessageBox(hWnd, szText, _T("Tip"), MB_OK); } } } break; case WM_COMMAND: { UINT nControlID = LOWORD(wParam); UINT nNotificationCode = HIWORD(wParam); if (nNotificationCode == BN_CLICKED) { if (nControlID == IDC_BUTTON_1) { //实现点击按钮把界面编辑框的文本插入到列表中 TCHAR szText[MAX_PATH] = { 0 }; Edit_GetText(GetDlgItem(hWnd, IDC_Edit_1), szText, MAX_PATH); //实现点击按钮就插入一行 int iTotalRow = ListView_GetItemCount(GetDlgItem(hWnd, IDC_LIST_1)); //获取当前列表中有多少行 LV_ITEM row_item = { 0 }; row_item.mask |= LVIF_TEXT; row_item.pszText = szText; row_item.iItem = iTotalRow; int iRow = ListView_InsertItem(GetDlgItem(hWnd, IDC_LIST_1), &row_item); ListView_SetItemText(GetDlgItem(hWnd, IDC_LIST_1), iRow, 1, szText); } } } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, uMsg, wParam,lParam); break; } return 0; } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, INT nCmdShow) { WNDCLASSEX wcex = { 0 }; wcex.cbSize = sizeof(WNDCLASSEX); wcex.lpfnWndProc = WindowProc; wcex.lpszClassName = szWindowClassName; if (!RegisterClassEx(&wcex)) return 0; HWND hWnd = CreateWindow(szWindowClassName, szTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,800,600,NULL,NULL,hInstance,NULL); if (!hWnd) return 0; ShowWindow(hWnd, nCmdShow); MSG msg = { 0 }; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int)msg.wParam; }
浙公网安备 33010602011771号