Различия

Показаны различия между двумя версиями страницы.


shablon_winapi_gui [2025/07/06 12:39] (текущий) – создано - внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +====== Шаблон WinAPI GUI ======
 +<file>
 +/* Простейщее WinAPI приложение. Шаблон.
  
 +*/
 +
 +#include <windows.h>
 +
 +#include<tchar.h>
 +
 +
 +
 +LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); // прототип функции WndProc
 +
 +
 +
 +int WINAPI _tWinMain(HINSTANCE hInstance, // дескриптор текущего экземпляра окна
 +
 +                     HINSTANCE hPrevInstance, // дескриптор предыдущего экземпляра окна
 +
 +                     LPTSTR    lpCmdLine, // указатель на командную строку
 +
 +                     int       nCmdShow // показывает состояние окна
 +
 +
 +
 +{
 +
 + MSG uMsg;
 +
 + HWND hMainWnd;
 +
 + TCHAR szWindowClass[] = L"MyClass"; // имя класса
 +
 + WNDCLASSEX wcex; // объявление переменной типа структура оконного класса
 +
 +
 +
 + wcex.cbSize = sizeof(WNDCLASSEX); // размер структуры в байтах
 +
 + wcex.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; // стиль окна
 +
 + wcex.lpfnWndProc = WndProc; //адрес оконной процедуры (WNDPROC)WndProc;
 +
 + wcex.cbClsExtra = 0; // доп. поля, кот могут потребоваться дальше
 +
 + wcex.cbWndExtra = 0; // доп. поля, кот могут потребоваться дальше
 +
 + wcex.hInstance = hInstance;// описатель приложения, первый параметр функции _tWinMain
 +
 + wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION)); // определение иконки
 +
 + wcex.hCursor = LoadCursor(NULL, IDC_ARROW); // определение курсора LoadCursor(NULL, IDC_CROSS);
 +
 + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); // установка фона GetSysColorBrush(COLOR_DESKTOP);
 +
 + wcex.lpszMenuName = NULL; // определение меню
 +
 + wcex.lpszClassName = szWindowClass; // имя класса
 +
 + wcex.hIconSm = NULL; //определение маленькой иконки
 +
 +
 +
 + // Регистрируем класс окна 
 +
 + if (!RegisterClassEx(&wcex)) { 
 +
 + MessageBox(NULL, L"Cannot register class", L"Error", MB_OK); 
 +
 + return 0; 
 +
 + }
 +
 +
 +
 + // Создаем основное окно приложения 
 +
 + hMainWnd = CreateWindow(szWindowClass/*имя зарегистрированного или готового класса*/,
 +
 + L"A Hellol Application"/*имя окна*/,
 +
 + WS_OVERLAPPEDWINDOW/*| WS_VSCROLL*/  /*стили окна*/,
 +
 + CW_USEDEFAULT/*расположение окна Х*/,
 +
 + 0/*расположение окна У*/,
 +
 + CW_USEDEFAULT/*ширина окна*/,
 +
 + 0/*высота окна*/,
 +
 + (HWND)NULL/*родитель. если нет, то NULL*/,
 +
 + (HMENU)NULL/*дескриптор меню. если меню нет, то NULL*/,
 +
 + (HINSTANCE)hInstance/*описатель приложения*/,
 +
 + NULL/*исп. в многооконных приложениях. если однооконное, то NULL*/
 +
 + );//возвращает описатель окна и передает его в hMainWnd
 +
 +
 +
 + // Показываем наше окно 
 +
 + ShowWindow(hMainWnd/*описатель окна, кот нужно показать*/, SW_NORMAL/*как именно открыто окно, режимы*/); 
 +
 + UpdateWindow(hMainWnd); // Отображение окна
 +
 +
 +
 + // Выполняем цикл обработки сообщений до закрытия приложения 
 +
 + while (GetMessage(&uMsg/*адрес структуры, принемающей сообщения*/,
 +
 + NULL/*из каких окон принемать сообщения. если от всех, то NULL*/,
 +
 + 0/*ограничение сообщений. если нет, то 0*/,
 +
 + 0/*ограничение сообщений. если нет, то 0*/
 +
 + )/*функция, выбирающая сообщения из очереди cообщений программы*/)
 +
 +
 +
 + TranslateMessage(&uMsg); /*преобразование нажатия симбольных клавиш (облегчение работы определения нажатой клавиши)*/
 +
 + DispatchMessage(&uMsg); //отсылает сообщения в оконную процедуру WndProc
 +
 + }
 +
 +
 +
 + return 0;
 +
 +}
 +
 +
 +
 +LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 +
 +{
 +
 + //int wmId, wmEvent;
 +
 + PAINTSTRUCT ps;
 +
 + HDC hdc;
 +
 +
 +
 + switch (uMsg)
 +
 + {
 +
 + case WM_COMMAND:
 +
 +// wmId    = LOWORD(wParam);
 +
 +// wmEvent = HIWORD(wParam);
 +
 + case WM_PAINT:
 +
 + hdc = BeginPaint(hWnd, &ps);
 +
 + // TODO: Add any drawing code here...
 +
 + EndPaint(hWnd, &ps);
 +
 + break;
 +
 + case WM_DESTROY:
 +
 + PostQuitMessage(0);
 +
 + break;
 +
 + default:
 +
 + return DefWindowProc(hWnd, uMsg, wParam, lParam);
 +
 + }
 +
 + return 0;
 +
 +}
 +
 +
 +</file>

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!