русский

Играюсь, вспоминаю 03.02.2025

Heute, 03:49
Играюсь, вспоминаю 03.02.2025
 
uscheswoi_82 патриот

Всем привет!

Хотел бы поиграться в 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. А выложил только сегодня.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
 

Sprung zu