1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | /*---------------------------------------- 2020.10.11, by bo ----------------------------------------*/ #include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; #define ID_LIST 1 int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("List1") ; HWND hwnd ; MSG msg ; WNDCLASS wndclass ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName ; if (!RegisterClass (&wndclass)) { MessageBox (NULL, TEXT ("This program requires Windows NT!"), szAppName, MB_ICONERROR) ; return 0 ; } hwnd = CreateWindow (szAppName, TEXT ("Listbox Demo"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 200, 200, NULL, NULL, hInstance, NULL) ; ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; } LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND hListBox; static int value ; int i; HINSTANCE hInstance ; TCHAR szBuffer[100] ; int iIndex, iLength; TCHAR * pVarName ; switch (message) { case WM_CREATE : hListBox = CreateWindow("LISTBOX", NULL, //WS_CHILD|WS_VSCROLL | WS_TABSTOP | LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS, WS_CHILD | WS_VISIBLE | LBS_STANDARD, 30, 20, 60, 80, hwnd, (HMENU) ID_LIST, hInstance, NULL) ; //ShowWindow(hListBox,SW_SHOW); SendMessage(hListBox,LB_ADDSTRING ,0,TEXT("你好")); SendMessage(hListBox,LB_ADDSTRING ,0,(LPARAM)"我好"); SendMessage(hListBox,LB_ADDSTRING ,0,"他好"); return 0 ; case WM_COMMAND : if (LOWORD (wParam) == ID_LIST && HIWORD (wParam) == LBN_SELCHANGE) { // Get current selection. iIndex = SendMessage (hListBox, LB_GETCURSEL, 0, 0) ; iLength = SendMessage (hListBox, LB_GETTEXTLEN, iIndex, 0) + 1 ; pVarName = calloc (iLength, sizeof (TCHAR)) ; SendMessage (hListBox, LB_GETTEXT, iIndex, (LPARAM) pVarName) ; MessageBox(hwnd,pVarName,"选择的内容",MB_OK); free (pVarName) ; } return 0 ; case WM_SIZE : return 0 ; case WM_DESTROY : PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; } |
创建ListBox;单击选项弹出消息框显示选择的项;
如果单击了列表框,在收到WM_COMMAND 消息时,使用LOWORD (wParam)取出的是列表框id,使用HIWORD (wParam) 取出的是所产生的列表框消息;
暂时不知道为什么中文显示有问题;