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