Содержание
- 2. СПбГПУ Макрос HANDLE_MSG Оконная функция должна представлять собой один длинный оператор switch со столькими блоками case,
- 3. СПбГПУ Структура программы с макросом HANDLE_MSG В файле WINDOWSX.H. определена группа макросов HANDLE_MSG, позволяющая упростить структуру
- 4. СПбГПУ Модификация программы Модифицируем программу, введя, в ее оконную функцию макрос HANDLE _MSG. Фактически изменению подвергнется
- 5. СПбГПУ Модификация программы /*Прототип используемой в программе функции пользователя*/ LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); //Оконная функция void OnDestroy(HWND);
- 6. СПбГПУ Модификация программы /*Главная функция WinMain*/ int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,int) { char szClassHame[]="MainWindow"; //Произвольное имя класса
- 7. СПбГПУ Модификация программы /*3арегистрируем класс главного окна*/ memset(&wc,0,sizeof(wc)); //Обнуление всех членов структуры wc wc.lpfnWndProc=WndProc; //Oпределим оконную
- 8. СПбГПУ Модификация программы /*Создадим главное окно и сделаем его видимым*/ HWND hwnd=CreateWindow(szClassName,szTitle, //Класс и заголовок окна
- 9. СПбГПУ Модификация программы /*Организуем цикл обработки сообщений*/ while(GetMessage(&Msg,NULL,0,0)) //Цикл обработки сообщений: DispatchMessage(&Msg); //получить сообщение, вызвать WndProc
- 10. СПбГПУ Модификация программы /*0конная функция WndProc главного окна*/ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam,
- 11. СПбГПУ Модификация программы /*Функция OnDestroy обработки сообщения WM DESTROY*/ void OnDestroy(HWND) { PostQuitMessage(0); //Вызов функции Windows
- 12. СПбГПУ Имена функций обработки сообщений В документации к Windows рекомендуется образовывать имена функций обработки сообщений из
- 13. СПбГПУ Новая функция Введение в программу новой функции требует определения ее прототипа. Соответственно в раздел прототипов
- 14. СПбГПУ Однако в случае других функций это не так. Для каждой функции обработки того или иного
- 15. СПбГПУ Прототипы функций обработки сообщений Сообщение Прототип функции обработки сообщения WM_COMMAND void Cls_OnCommand(HWND hwnd, int id,
- 16. СПбГПУ Сообщение Прототип функции обработки сообщения WM_NOTIFY BOOL Cls_OnNotify(HWND hwnd, INT idCtrl, NMHDR* pnmh); , WM_PAINT
- 17. СПбГПУ Расширение макроса HANDLE_MSG Макрос HANDLE_MSG разворачивается в предложение языка C++ с ключевым словом case. Общий
- 18. СПбГПУ Макрос HANDLE_MSG Для макроса HANDLE_MSG в составе файла WINDOWSX.H имеется следующее определение: #define HANDLE_MSG(hwnd, message,
- 19. СПбГПУ Примеры Для каждого сообщения Windows в составе файла WINDOWSX.H имеется отдельный макрос такого вида, причем
- 20. СПбГПУ Как выполняется это предложение? Если пришло сообщение WM_DESTROY и аргумент msg функции WndProc() равен коду
- 21. СПбГПУ Пример WM_PAINT: Схожим образом расширяется строка для сообщения WM_PAINT: HANDLE_MSG(hwnd,WM_PAINT,OnPaint) ; case WM_PAINT:return(OnPaint (hwnd),0L); Для
- 22. СПбГПУ Пример HANDLE_WM_COMMAND: Расширение макроса HANDLE_WM_COMMAND: В результате наша строка HANDLE_MSG(hwnd, WM_COMMAND, OnCommand) ; #define HANDLE_MSG(hwnd,
- 23. СПбГПУ Пример HANDLE_WM_COMMAND: case WM_COMMAND: return(OnCommand(hwnd,(int)wParam,(HWND)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L); Функция обработки сообщения WM_COMMAND должна использоваться в соответствии
- 25. Скачать презентацию