Вход на сайт
Играюсь, вспоминаю 03.02.2025
402
03.02.25 03:49
Всем привет!
Хотел бы поиграться в ListBox, вспомнить как данные из поле запихивать в ListBox.
1. Вот код main.c:
#include <windows.h>
#define BTN_ADD 1000
HWND hwndButtonAdd;
HWND hwndField;
HWND hwndListBox;
char *buf;
LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
char szClassName[ ] = "uscheswoi_82_ListBoxDemo";
int WINAPI WinMain(HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil) {
HWND hwnd;
MSG messages;
WNDCLASSEX wincl;
wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure;
wincl.style = CS_DBLCLKS;
wincl.cbSize = sizeof(WNDCLASSEX);
wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
wincl.lpszMenuName = NULL;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;
wincl.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
if(!RegisterClassEx(&wincl)) return 0;
hwnd = CreateWindowEx(
0,
szClassName,
"Пример ListBox",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
320,
370,
HWND_DESKTOP,
NULL,
hThisInstance,
NULL
);
ShowWindow(hwnd, nFunsterStil);
while(GetMessage(&messages, NULL, 0, 0)) {
TranslateMessage(&messages);
DispatchMessage(&messages);
}
return messages.wParam;
}
LRESULT CALLBACK WindowProcedure(HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam) {
switch(message) {
case WM_COMMAND:
if(wParam == BTN_ADD) {
if(GetWindowTextLength(hwndField) <= 2) {
MessageBox(hwnd, "Ошибка, введите в поле текст", "Ошибка", MB_OK | MB_ICONEXCLAMATION);
return;
}
buf = (char *)malloc(GetWindowTextLength(hwndField) + 1);
GetWindowText(hwndField, buf, GetWindowTextLength(hwndField));
SendMessage(hwndListBox, LB_ADDSTRING, 0, (LPARAM)buf);
SetWindowText(hwndField, "");
free(buf);
}
break;
case WM_CREATE:
hwndButtonAdd = CreateWindow("BUTTON", "&Добавить", WS_CHILD | WS_VISIBLE,
210, 10, 100, 20, hwnd, (HMENU)BTN_ADD, NULL, lParam);
hwndField = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | WS_VISIBLE,
10, 10, 190, 20, hwnd, NULL, NULL, lParam);
hwndListBox = CreateWindowEx(WS_EX_CLIENTEDGE, "LISTBOX", "", WS_CHILD | WS_VISIBLE,
10, 40, 190, 300, hwnd, NULL, NULL, lParam);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
2. Вуаля! А вот так работает:

Завтра подправлю код, а то последнюю букву съедает. Этот код я написал ещё вчера, т.е. позавчера 01.02.2025. А выложил только сегодня.
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
Моя ФЛ Он и Она
Моя ФЛ Он и Она
NEW 06.02.25 01:18
в ответ uscheswoi_82 03.02.25 03:49
Чтобы работало правильно, и не удалялись последнии буквы в конце, нужно написать вот так:
buf = (char *)malloc(GetWindowTextLength(hwndField) + 1); GetWindowText(hwndField, buf, GetWindowTextLength(hwndField) + 1);
Теперь работает правильно как надо.
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
Моя ФЛ Он и Она
Моя ФЛ Он и Она
список