Deutsch

Воспоминание программирование под Windows 9x 24.09.2024

25.09.24 00:30
Re: Воспоминание программирование под Windows 9x 24.09.2024
 
uscheswoi_82 коренной житель
uscheswoi_82
в ответ uscheswoi_82 24.09.24 23:57, Последний раз изменено 25.09.24 02:59 (uscheswoi_82)

Давайте напишим простую программу, выглядеть будет так:



Прежде чем начать будем использовать следующие Win32 API функции:

https://learn.microsoft.com/ru-ru/windows/win32/api/winuse...

https://learn.microsoft.com/ru-ru/windows/win32/api/winuse...

https://learn.microsoft.com/ru-ru/windows/win32/api/winuse...


А так-же константы:

https://learn.microsoft.com/ru-ru/windows/win32/winmsg/ext...

https://learn.microsoft.com/ru-ru/windows/win32/winmsg/ext...


Вот код main.c:

#include <windows.h>
#define ID_SAY   100 /* ID кнопки 

HWND hwndButton;
HWND hwndField;

LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
char szClassName[ ] = "WindowsApp";

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,
           "Моя первая Windows программа",
           WS_OVERLAPPEDWINDOW,
           CW_USEDEFAULT, CW_USEDEFAULT,
           290, 115,
           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)
{
  char *buf, *buf2; /* Переменные будут содержать тексты */
  int sz; /* Переменная для размера текста в поле */
  switch(message) {
  /* Событие срабатывает, если нажимать на кнопки */
  case WM_COMMAND:
    /* Если нажали на кнопку "Нажми на меня!" */
    if(wParam == ID_SAY) {
      sz = GetWindowTextLength(hwndField) + 1; /* Получаем количество букв в поле */
      buf = (char *) malloc(sz); /* Резервируем память */
      buf2 = (char *) malloc(sz + 100); /* Резервируем память */
      GetWindowText(hwndField, buf, sz); /* Получем текст из поле */
      sprintf(buf2, "Привет \"%s!\'", buf); /* Вставляем текст Привет "Антон Попов"! */
      MessageBox(hwnd, buf2, "Ваше имя", MB_OK); /* Выводим окно с сообщением */
      free(buf); /* Освобождаем зарезервированную память, чтобы не было утечки памяти */
      free(buf2); /* Освобождаем зарезервированную память, чтобы не было утечки памяти */ 
  }
  break;
  /* Событие срабатывает сразу как появляется окно, чтобы добавить элементы.
     Там в окне будут лейбл с надписью "Ваше имя:", поле для ввода имени, и
     кнопка с надписью "Намжи на меня!"
   */
  case WM_CREATE:
    CreateWindow("STATIC", "Ваше имя:", WS_CHILD | WS_VISIBLE, 
    10, 10, 120, 20, hwnd, (HMENU)ID_SAY, NULL, NULL); /* Лейбл с надписью "Ваше имя:" */
    hwndField = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | WS_VISIBLE | WS_BORDER, 
    90, 10, 120, 20, hwnd, (HMENU)ID_SAY, NULL, NULL); /* Поле, куда нужно вводить имя */
    hwndButton = CreateWindow("BUTTON", "Нажми на меня!", WS_CHILD | WS_VISIBLE, 
    10, 40, 120, 30, hwnd, (HMENU)ID_SAY, NULL, NULL); /* Кнопка с надписью "Нажми на меня!" */
  break;
  case WM_DESTROY:
    PostQuitMessage(0);
  break;
  default:
    return DefWindowProc (hwnd, message, wParam, lParam);
  }
  return 0;
}

Вуаля! Результат работы нашей программы:



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

Перейти на