Вход на сайт
Воспоминание программирование под Windows 9x 24.09.2024
429 просмотров
Перейти к просмотру всей ветки
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; }
Вуаля! Результат работы нашей программы:
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
Дневник тяжелобольного инвалида