Advertisement
nikminer4sv

Untitled

Aug 28th, 2021 (edited)
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.01 KB | None | 0 0
  1. #include <windows.h> // заголовочный файл, содержащий WINAPI
  2.  
  3. // Прототип функции обработки сообщений с пользовательским названием:
  4. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  5. TCHAR mainMessage[] = "Some text...";
  6.  
  7. // Управляющая функция:
  8. int WINAPI WinMain(HINSTANCE hInst, // дескриптор экземпляра приложения
  9.                    HINSTANCE hPrevInst, // не используем
  10.                    LPSTR lpCmdLine, // не используем
  11.                    int nCmdShow) // режим отображения окошка
  12. {
  13.     TCHAR szClassName[] = "My class"; // строка с именем класса
  14.     HWND hMainWnd; // создаём дескриптор будущего окошка
  15.     MSG msg; // создём экземпляр структуры MSG для обработки сообщений
  16.     WNDCLASSEX wc; // создаём экземпляр, для обращения к членам класса WNDCLASSEX
  17.     wc.cbSize        = sizeof(wc); // размер структуры (в байтах)
  18.     wc.style         = CS_HREDRAW | CS_VREDRAW; // стиль класса окошка
  19.     wc.lpfnWndProc   = WndProc; // указатель на пользовательскую функцию
  20.     wc.lpszMenuName  = NULL; // указатель на имя меню (у нас его нет)
  21.     wc.lpszClassName = szClassName; // указатель на имя класса
  22.     wc.cbWndExtra    = NULL; // число освобождаемых байтов в конце структуры
  23.     wc.cbClsExtra    = NULL; // число освобождаемых байтов при создании экземпляра приложения
  24.     wc.hIcon         = LoadIcon(NULL, IDI_WINLOGO); // декриптор пиктограммы
  25.     wc.hIconSm       = LoadIcon(NULL, IDI_WINLOGO); // дескриптор маленькой пиктограммы (в трэе)
  26.     wc.hCursor       = LoadCursor(NULL, IDC_ARROW); // дескриптор курсора
  27.     wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // дескриптор кисти для закраски фона окна
  28.     wc.hInstance     = hInst; // указатель на строку, содержащую имя меню, применяемого для класса
  29.     if(!RegisterClassEx(&wc)){
  30.         // в случае отсутствия регистрации класса:
  31.         MessageBoxW(NULL, L"Не получилось зарегистрировать класс!", L"Ошибка", MB_OK);
  32.         return NULL; // возвращаем, следовательно, выходим из WinMain
  33.     }
  34.     // Функция, создающая окошко:
  35.     hMainWnd = CreateWindow(
  36.         szClassName, // имя класса
  37.         "Procedure", // имя окошка (то что сверху)
  38.         WS_OVERLAPPEDWINDOW | WS_VSCROLL, // режимы отображения окошка
  39.         CW_USEDEFAULT, // позиция окошка по оси х
  40.         NULL, // позиция окошка по оси у (раз дефолт в х, то писать не нужно)
  41.         CW_USEDEFAULT, // ширина окошка
  42.         NULL, // высота окошка (раз дефолт в ширине, то писать не нужно)
  43.         (HWND)NULL, // дескриптор родительского окна
  44.         NULL, // дескриптор меню
  45.         HINSTANCE(hInst), // дескриптор экземпляра приложения
  46.         NULL); // ничего не передаём из WndProc
  47.     if(!hMainWnd){
  48.         // в случае некорректного создания окошка (неверные параметры и тп):
  49.         MessageBoxW(NULL, L"Не получилось создать окно!", L"Ошибка", MB_OK);
  50.         return NULL;
  51.     }
  52.     ShowWindow(hMainWnd, nCmdShow); // отображаем окошко
  53.     UpdateWindow(hMainWnd); // обновляем окошко
  54.     while(GetMessage(&msg, NULL, NULL, NULL)){ // извлекаем сообщения из очереди, посылаемые фу-циями, ОС
  55.         TranslateMessage(&msg); // интерпретируем сообщения
  56.         DispatchMessage(&msg); // передаём сообщения обратно ОС
  57.     }
  58.     return msg.wParam; // возвращаем код выхода из приложения
  59. }
  60.  
  61. LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
  62.     HDC hDC; // создаём дескриптор ориентации текста на экране
  63.     PAINTSTRUCT ps; // структура, сод-щая информацию о клиентской области (размеры, цвет и тп)
  64.     RECT rect; // стр-ра, определяющая размер клиентской области
  65.     COLORREF colorText = RGB(255, 0, 0); // задаём цвет текста
  66.     switch(uMsg){
  67.     case WM_PAINT: // если нужно нарисовать, то:
  68.         hDC = BeginPaint(hWnd, &ps); // инициализируем контекст устройства
  69.         GetClientRect(hWnd, &rect); // получаем ширину и высоту области для рисования
  70.         SetTextColor(hDC, colorText); // устанавливаем цвет контекстного устройства
  71.         DrawText(hDC, mainMessage, -1, &rect, DT_SINGLELINE|DT_CENTER|DT_VCENTER); // рисуем текст
  72.         EndPaint(hWnd, &ps); // заканчиваем рисовать
  73.         break;
  74.     case WM_DESTROY: // если окошко закрылось, то:
  75.         PostQuitMessage(NULL); // отправляем WinMain() сообщение WM_QUIT
  76.         break;
  77.     default:
  78.         return DefWindowProc(hWnd, uMsg, wParam, lParam); // если закрыли окошко
  79.     }
  80.     return NULL; // возвращаем значение
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement