Чтобы показать результат сделанных пунктами Load On, Load Off изменений, их обработка в функции OnMentK) завершается следующим оператором:

DefWi ndowProc(hWnd.WMJYSCOMMAND.SC_KEYMENU.'F');

В результате обработки сообщения WM_SYSCOMMAND на экран вызывается подменю File. Через секунду после этого посылкой в окно подменю File сообщения WMJCEYDOWN имитируется перевод курсора на пункт Load и выбор этого пункта. Можно также послать сообщение PostMessage(menuWnd,WM_LBUTT0ND0WN ,0,0), которое будет имитировать щелчок кнопкой мыши в окне подменю.

Весь исходный текст приложения разбит в проекте MenuModif на несколько небольших модулей. В файле resource.h определены константа IDR_MENU1 и команды меню. Файл Main.h содержит прототипы функций проекта.

Тексты модулей Init.cpp, Main.cpp, MyUtil.cpp, WndPoc.cpp, OnMenu.cpp, OnTimer.cpp приведены в следующих листингах.

Модуль Init.cpp предназначен для реализации операций, выполняемых однократно при пуске приложения. В нем находится функция InitAppC). Код модуля приведен в листинге 5.8.

Взаимодействие меню и приложения Листинг 5.8

#include <windows.h>
#include "Main.h"
#include "resource.h"
int InitApp(HINSTANCE KodPril)
{
WNDCLASS wc;
LPCTSTR Name-(LPCTSTR)"Menu": wc.hlnstance - KodPril;
wc.hCursor - LoadCursorC NULL. IDC_ARR0W );
wc.hlcon - LoadIcon(NULL.IDI_APPLICATION);
wc.lpszMenuName - MAKEINTRES0URCE(IDR_MENU1); wc.lpszClassName - Name;
wc.hbrBackground - (HBRUSH) (C0L0R_WIND0W + 1); wc.style - CS_VREDRAW | CS_HREDRAW;
wc.lpfnWndProc - InputWndProc; . wc.cbClsExtra - 0; wc.cbWndExtra - 0; if (!RegisterClass(&wc) return FALSE; HWND hWnd - CreateWindow(Name."MenuGraf".
WSJISIBLE I WS_OVERLAPPEDWINDOW.200. 200.400 .200.NULL.NULL.KodPri1.NULL);
if (IhWnd) return 2;
return 0;
}

Легко заметить, что код этого модуля почти не отличается от того, который использовался в проекте MenuMin. В новой версии изменен способ получения имени шаблона меню и добавлены строки подключения модулей resource.h и main.h.


⇐ Предыдущая| |Следующая ⇒