|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
На страницу группы практики...
/* T01FWIN.C * Пример базового макета программы под WinAPI. * Создание и поддержка простейшего окна. * * Автор: Виталий Галинский. * Дата: 31.05.2011 * Летняя учебно-исследовательская практика ФМЛ № 30, 2011 год. * Группа компьютерной графики. * Базовый (пустой) макет WinAPI. Handout04. * Copyright © 2011 * Computer Graphics Support Group of 30 Phys-Math Lyceum * © 2011 Физико-математический лицей № 30, Санкт-Петербург. */ #include <windows.h> #define WND_CLASS_NAME "My window class" /* Ссылка на функцию обработки */ LRESULT CALLBACK MyWindowFunc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ); /* Главная функция программы. * АРГУМЕНТЫ: * - дескриптор экземпляра приложения: * HINSTANCE hInstance; * - дескриптор предыдущего экземпляра приложения * (не используется и должно быть NULL): * HINSTANCE hPrevInstance; * - командная строка: * CHAR *CmdLine; * - флаг показа окна (см. SW_SHOWNORMAL, SW_SHOWMINIMIZED, SW_***): * INT ShowCmd; * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: * (INT) код возврата в операционную систему. */ INT WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, CHAR *CmdLine, INT ShowCmd ) { WNDCLASS wc; HWND hWnd; MSG msg; wc.style = CS_VREDRAW | CS_HREDRAW; /* Стиль окна: полностью перерисовывать * при изменении вертикального или * горизонтального размеров */ wc.cbClsExtra = 0; /* Дополнительное количество байт для класса */ wc.cbWndExtra = 0; /* Дополнительное количество байт для окна */ wc.hbrBackground = (HBRUSH)COLOR_WINDOW; /* Фоновый цвет - выбранный в системе */ wc.hCursor = LoadCursor(NULL, IDC_ARROW); /* Загрузка курсора (системного) */ wc.hIcon = LoadIcon(NULL, IDI_ERROR); /* Загрузка пиктограммы (системной) */ wc.lpszMenuName = NULL; /* Имя ресурса меню */ wc.hInstance = hInstance; /* Дескриптор приложения, регистрирующего класс */ wc.lpfnWndProc = MyWindowFunc; /* Указатель на функцию обработки */ wc.lpszClassName = WND_CLASS_NAME; /* Имя класса */ /* Регистрация класса в системе */ if (!RegisterClass(&wc)) { MessageBox(NULL, "Error register window class", "ERROR", MB_OK); return 0; } /* Создание окна */ hWnd = CreateWindow(WND_CLASS_NAME, /* Имя класса окна */ "Title", /* Заголовок окна */ WS_OVERLAPPEDWINDOW, /* Стили окна - окно общего вида */ CW_USEDEFAULT, CW_USEDEFAULT, /* Позиция окна (x, y) - по умолчанию */ CW_USEDEFAULT, CW_USEDEFAULT, /* Размеры окна (w, h) - по умолчанию */ NULL, /* Дескриптор родительского окна */ NULL, /* Дескриптор загруженного меню */ hInstance, /* Дескриптор приложения */ NULL); /* Указатель на дополнительные параметры */ /* Паказать и перерисовать окно */ ShowWindow(hWnd, ShowCmd); UpdateWindow(hWnd); /* Цикл обработки сообщений, пока не будет получено сообщение 'WM_QUIT' */ while (GetMessage(&msg, NULL, 0, 0)) { /* Обработка сообщений от клавиатуры */ TranslateMessage(&msg); /* Передача сообщений в функцию окна */ DispatchMessage(&msg); } return msg.wParam; } /* End of 'WinMain' function */ /* Функция обработки сообщения окна. * АРГУМЕНТЫ: * - дескриптор окна: * HWND hWnd; * - номер сообщения: * UINT Msg; * - параметр сообшения ('word parameter'): * WPARAM wParam; * - параметр сообшения ('long parameter'): * LPARAM lParam; * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: * (LRESULT) - в зависимости от сообщения. */ LRESULT CALLBACK MyWindowFunc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ) { switch (Msg) { case WM_DESTROY: /* Послать сообщение 'WM_QUIT' с параметром 'wParam' 0 - код возврата, * замена вызов: PostMessage(hWnd, WM_QUIT, код_возврата, 0); */ PostQuitMessage(0); return 0; } /* Вызов функции обработки сообщений по умолчанию */ return DefWindowProc(hWnd, Msg, wParam, lParam); } /* End of 'MyWindowFunc' function */ /* END OF 'T01FWIN.C' FILE */ |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|