Чтобы создать listbox нужно написать следующее:
hwndListBox = CreateWindowEx(WS_EX_CLIENTEDGE, "LISTBOX", "", WS_CHILD | WS_VISIBLE | WS_VSCROLL| LBS_NOTIFY, 10, 40, 400, 200, hwnd, (HMENU)CMD_LISTBOX1, NULL, NULL);
Чтобы получить количество записей в Listbox:
DWORD count = SendMessage(hwndListBox, LB_GETCOUNT, 0, 0);
Чтобы получить номер выделенного элемента:
DWORD selected_item; selected_item = SendMessage(hwndListBox, LB_GETCURSEL, 0, 0);
Чтобы получить текст из выделенного элемента:
SendMessage(hwndListBox, LB_GETTEXT, (WPARAM)selected_item, (LPARAM)buf);
Чтобы добавить новый элемент:
SendMessage(hwndListBox, LB_ADDSTRING, 0, (LPARAM)buf);
Чтобы удалить выделенный элемент:
SendMessage(hwndListBox, LB_DELETESTRING, (WPARAM)selected_item, 0);
Чтобы очистить listbox:
SendMessage(hwndListBox, LB_RESETCONTENT, 0, 0);
Полный код:
#include <windows.h> #define CMD_BUTTON1 100 // Кнопка Add #define CMD_BUTTON2 101 // Кнопка Del #define CMD_LISTBOX1 102 // Listbox #define CMD_TEXTBOX1 103 // Текстовое поле HWND hwndListBox, hwndButton1, hwndButton2, hwndTextBox; char buf[512]; DWORD selected_item; LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch(Message) { case WM_COMMAND: switch(LOWORD(wParam)) { case CMD_TEXTBOX1: // Если нажали на текстовое поле break; case CMD_LISTBOX1: // Если нажали на listbox if(SendMessage(hwndListBox, LB_GETCOUNT, 0, 0) >= 0) { // Если количество элементов больше 0, то получаем выбранный элемент selected_item = SendMessage(hwndListBox, LB_GETCURSEL, 0, 0); // Получаем текст SendMessage(hwndListBox, LB_GETTEXT, (WPARAM)selected_item, (LPARAM)buf); // Записываем текст в поле SetWindowText(hwndTextBox, buf); } else MessageBox(hwnd, "Please select item, to delete", "Warning", MB_OK | MB_ICONWARNING); // Иначе пишим, пожайлуста выберете элемент для удаления break; case CMD_BUTTON1: // Если нажали на кнопку Add, проверяем ввели ли в поле текст if(GetWindowTextLength(hwndTextBox) < 1) { // Иначе выдаём предупреждение MessageBox(hwnd, "Please type text", "Warning", MB_OK | MB_ICONWARNING); break; } else if(GetWindowTextLength(hwndTextBox) > 512) GetWindowText(hwndTextBox, buf, 512); // Если текст больше 512 символов, то выбераем 512 else GetWindowText(hwndTextBox, buf, GetWindowTextLength(hwndTextBox)+1); Иначе получаем размер поля, и считываетм текст // Добавляем текст из текстового поле SendMessage(hwndListBox, LB_ADDSTRING, 0, (LPARAM)buf); // Очищаем текстовое поле SetWindowText(hwndTextBox, ""); break; case CMD_BUTTON2: // Если выделен текст if(SendMessage(hwndListBox, LB_GETCOUNT, 0, 0) >= 0) { // Получаем выбранный элемент selected_item = SendMessage(hwndListBox, LB_GETCURSEL, 0, 0); // Удаляем выбранный элемент из listbox SendMessage(hwndListBox, LB_DELETESTRING, (WPARAM)selected_item, 0); } break; } break; case WM_CREATE: // Добавляем текстовое поле hwndTextBox = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | WS_VISIBLE, 10, 10, 400, 20, hwnd, (HMENU)CMD_TEXTBOX1, NULL, NULL); // Добавляем кнопку Add hwndButton1 = CreateWindow("BUTTON", "ADD", WS_CHILD | WS_VISIBLE, 410, 10, 100, 20, hwnd, (HMENU)CMD_BUTTON1, NULL, NULL); // Добавляем кнопку Del hwndButton2 = CreateWindow("BUTTON", "DEL", WS_CHILD | WS_VISIBLE, 520, 10, 100, 20, hwnd, (HMENU)CMD_BUTTON2, NULL, NULL); // Добавляем listbox hwndListBox = CreateWindowEx(WS_EX_CLIENTEDGE, "LISTBOX", "", WS_CHILD | WS_VISIBLE | WS_VSCROLL| LBS_NOTIFY, 10, 40, 400, 200, hwnd, (HMENU)CMD_LISTBOX1, NULL, NULL); // Очищаем listbox SendMessage(hwndListBox, LB_RESETCONTENT, 0, 0); break; case WM_DESTROY: { PostQuitMessage(0); break; } default: return DefWindowProc(hwnd, Message, wParam, lParam); } return 0; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wc; HWND hwnd; MSG msg; memset(&wc,0,sizeof(wc)); wc.cbSize = sizeof(WNDCLASSEX); wc.lpfnWndProc = WndProc; wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wc.lpszClassName = "WindowClass"; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if(!RegisterClassEx(&wc)) { MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK); return 0; } hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","ListBox Demo",WS_VISIBLE|WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL,NULL,hInstance,NULL); if(hwnd == NULL) { MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK); return 0; } while(GetMessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
А вот результат: