В основной цикл нужно добавить проверку, код которой приведен в листинге 10.6.
Листинг 10.6
while (GetMessageULPMSG) &msg. NULL. 0. 0)) {
if(msg.hwnd! = hWnd)
i f (msg. message-WMJCEYD0WN) b « b;
}
Вызовите немодальный диалог и введите с клавиатуры любой символ. Если сообщение WM_KEYD0WN поступает в основной цикл, то нужно определить, какому окну оно предназначено. Также нужно проверить, поступают ли в основной цикл сообщения о щелчках мыши в главном окне, если на экран вызван модальный диалог. Помимо этого необходимо узнать, какое сообщение поступает в немодальный диалог при нажатии клавиши Enter или Пробел, если в основной цикл не включена функция IsDialogMessage().
11. Технология создания диалоговых окон на основе их компоновки при помощи редактора ресурсов не позволяет изменять состав окна во время функционирования приложения. Но такую задачу легко решить, вспомнив, что элементы управления можно создавать как окна, дочерние по отношению к окну диалога. Измените проект DlgMin таким образом, чтобы по щелчку на кнопке с идентификатором ID2 кнопка уничтожалась, а на ее месте появлялись две кнопки стиля RADI0BUTT0N.
12. Выведите на экран прямоугольник, высота и ширина которого задаются при помощи диалогового окна, содержащего два элемента редактирования и кнопки Принять и Отказ.
13. Измените проект Password2 таким образом, чтобы для ввода строки вместо вызова функции InitStrO дочернему окну посылалось сообщение WMJNITSTR.
14. В проекте EditToWheel диалоговое окно размещается под основным. Измените проект таким образом, чтобы при недостатке места под основным окном диалоговое окно выводилось в верхнем левом углу рабочей области.
Скелетный проект
15. Включите в диалоговое окно проекта EditToWheel поля для настройки частоты регенерации изображения и скорости движения колеса.
16. В проекте ввода строки иероглифов завершать ввод строки нужно двумя нажатиями клавиши Enter. Когда пользователь об этом забывает, сформированная строка остается в редакторе I ME и не попадает в приложение. Если кроме сообщений WM_SETTEXT и WM_GETTEXT перехватывать также WM_SETF0CUS, то редактор IME формирует строку в отдельном окне, а текст в поле Edit появляется только после его фактического получения. Неудобство этого варианта заключается в том, что в поле Edit не отображается текстовый курсор. Устраните указанный недостаток, перехватывая сообщение WM_SETF0CUS и самостоятельно имитируя отображение курсора в поле Edit.