/* Простейщее 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; }