Чтобы создать 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;
}
А вот результат: