break;
}
}
Вызов диалогового окна производится при помощи макроса TIMESTRING, объявление которого приведено в листинге 10.5.
Листинг 10.5
#define TIMESTRINGCw. t. s) {char str [4096]; sprintf(str ."«s \n *s\#t.s):
DialogBoxParam(GetModuleHandle(NULL)."DLG_ABOUT".w.\
(DLGPR0C)Di a1ogAbout.(LPARAM)str_);}
Этот макрос объявляется в модуле Utils.h. Макросу передаются дескриптор окна-собственника диалога, время отображения диалогового окна и выводимый в нем текст. Текст из переменной s выводится в несколько строк. Переход на новую строку диалога производится при помощи последовательности \п или U.
Диалоговая процедура DialogAboutC ), вызываемая этим макросом, находится в модуле DialogAbout.cpp, который можно найти на компакт-диске.
Прототипы используемых в проекте функций помещены в файл Main.h.
Скелетный проект
Задания для самостоятельного выполнения
1. При работе проекта MenuModif в момент останова движения командой Graphics выводившееся подменю стирает часть рабочей области. Для устранения этого недостатка вставьте в оконную процедуру обработку сообщения WM_PAI NT и сделайте другие необходимые изменения в проекте MenuModif.
2. Принятое в проекте деление окна на две области связано с определенными неудобствами. Так, например, графические примитивы отсекаются по границам окна, поэтому изображение может пересекать границу между областями и закрывать сообщения. Также следует учесть, что координаты в области сообщений отсчитываются не от нуля, а от значения, заданного в дополнительной глобальной переменной. Замените области двумя окнами, нижнее из которых не имеет меню и области заголовка. Можно даже вложить оба окна в третье окно, которое не имеет даже рамки и кисти для закраски фона. Из-за описанных особенностей третье окно будет невидимым и не потребует затрат времени на обработку сообщения WM_ERASEBKGND.
3. Дополните проект, созданный в задании 2, средствами вывода подсказки о назначении терминального пункта меню, когда курсор задерживается на нем более чем на одну секунду.