Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Янг Майкл Дж. -> "Visual С++ 6. Полное руководство: В 2 т.(том2)" -> 42

Visual С++ 6. Полное руководство: В 2 т.(том2) - Янг Майкл Дж.

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том2) — Бином, 2006. — 530 c.
Скачать (прямая ссылка): vicualcc2006t2.djvu
Предыдущая << 1 .. 36 37 38 39 40 41 < 42 > 43 44 45 46 47 48 .. 173 >> Следующая

End На последнюю позицию строки WM_ _HSCROLL, SB_ BOTTOM
Ctrl+End На последнюю позицию последней строки WM_ _HSCROLL, SB_ BOTTOM
PgUp На одну страницу вверх WM_ _HSCROLL, SB_ _PAGEUP
PgDn На одну страницу вниз WM_ HSCROLL, SB_ _PAGEDOWN
Обратите внимание: до передачи сообщения полосе прокрутки функция ОпКеуОсжп проверяет, видима ли соответствующая полоса прокрутки, так как при получении сообщения от скрытой полосы прокрутки код СЗсго11У1ем работает
неправильно. MFC скрывает горизонтальную полосу прокрутки, если окно представления имеет такую же ширину, как текст (или большую), и скрывает вертикальную полосу прокрутки, если окно представления имеет такую же высоту', как текст (или большую). Для получения размеров текста функция OnView вызывает функцию CScrollView: :GetTotalSize, а для получения размера окна представления она — GetClientRect.
CSize DocSize = GetTotalSize (); RECT ClientRect; GetClientRect (SCiientRect);
При передаче сообщения горизонтальной полосы прокрутки производится проверка ширины текста, выполняемая следующим образом.
if (ClientRect.right < DocSize.cx)
// если горизонтальная полоса прокрутки видима, // передается сообщение .. .
Аналогично, при передаче сообщения вертикальной полосы прокрутки производится проверка высоты текста.
if (ClientRect.bottom < DocSize.cy)
// если вертикальная полоса прокрутки видима, // передается сообщение . . .
Изменения программы TextDemo завершены. Теперь ее можно скомпилировать и выполнить. Листинги исходного текста TextDemo помещены в конце главы.
Обработка сообщения wm_char
При нажатии большинства клавиш окну с фокусом ввода передается сообщение wm_char. Клавиши, которые не передают сообщения wm_char, перечислены в табл. 18.6. Когда программа позволяет печатать текст, самый простой способ чтения кода клавиши состоит в предоставлении обработчика сообщения WM_CHAR, более удобного, чем WM_KEYDOWN, так как он передает стандартный код ANSI печатаемого символа, а не виртуальный код клавиши, транслирующийся в код символа. Код символа, переданный обработчику WMCHAR, можно сразу вставить в строку символов для сохранения текста или отобразить в окне или на другом устройстве, используя функцию, подобную CCD: :TextOut.
Обычно при вводе текста в программу символы отображаются на экране внутри окна программы. В этом параграфе для иллюстрации базовых методов, необходимых для чтения текста и отображения символов, используется программа Echo, которая читает вводимые символы и отображает их в верхней части окна программы. Когда строка достигает правой границы окна, можно продолжать ввод, но символы не будут видны. Можно выбрать команду Clear в меню Edit для удаления строки и начать вводить другую. На рис. 18.8 показано окно программы после ввода нескольких символов.
тшш
¦ •............. ¦..........i . .......... . i -¦-'.,,;,.»..,„,,.
this is text that has been typed into the program...
Рис. 18.8. Окно программы Echo после ввода текста
Генерация исходного кода
Используем мастер AppWizard для генерации исходного текста программы Echo. В диалоговом окне New Project Workspace определите Echo как имя проекта, а в диалоговых окнах AppWizard (Step 1 — 6) выберите те же установки, что и для программы Greet в гл. 9.
Модификация ресурсов
После генерации исходных файлов в нижней части окна Project Workspace откройте вкладку ResourceView, а в редакторе меню — меню idr_mainframe. Удалите меню File, затем — все пункты в меню Edit, но само пустое меню сохраните. Теперь добавьте в меню Edit пункты, описанные в табл. 18.8. Завершенное меню Edit показано на рис. 18.9.
Таблица. 18.8. Свойство пунктов меню Edit
Идентификатор Надпись Другие свойства
Отсутствует &Edit Всплывающее меню
ID EDIT CLEAR &Clear Отсутствуют
Отсутствует Отсутствует Разделитель
ID АРР EXIT E&xit Отсутствуют
Кроме того, значок программы idr_main frame можно настроить в графическом редакторе (рис. 18.10). Программа содержит стандартное изображение размером 32x32 пикселя.
^ Echo.ic - DR_HAINFRAME (Menu) BREIj
Edn Help ¦ Eg* t,...................______;
Рис. 18.9. Завершенное меню Edit в редакторе меню
Щ Echoic IDR_MAINFRAME (Icon)
Oevige: J Standard (32x32)
"3€t
¦¦¦¦
¦і___
¦¦¦¦і
мм.
¦¦¦¦¦ >¦¦¦«¦ ¦¦¦¦¦¦
¦¦P
прів
ПШ m ¦¦¦¦¦¦¦¦¦
mm
Рис. 18.10. Значок в программе Echo на прилагаемом компакт-диске, отображенный в
графическом редакторе
Определение обработчиков сообщений
Теперь определим функции для обработки сообщений wmchar, посылаемых при каждом вводе символа, и сообщений меню, посылаемых при каждом выборе команды Clear в меню Edit.
Для определения обработчиков сообщения в диалоговом окне мастера ClassWizard откройте вкладку Message Maps, а в списке Class name выберите класс CEchoView, чтобы функции, обрабатывающие сообщения, были добавлены в класс представления. Это необходимо, чтобы окно представления получило данные сообщения.
Далее в списке Object IDs выберите класс CEchoView, в списке Message — wm_CHAR и щелкните на кнопке Add Function. Окно мастера сгенерирует обработчик сообщения wmchar с именем OnChar. Затем в списке Object IDs выберите пункт ID_EDIт_сlear (идентификатор команды Clear), а в списке Message — пункт command и щелкните на кнопке Add Function. Примите для обработчика команды меню OnEditclear имя, заданное по умолчанию. Закройте диалоговое окно мастера ClassWizard щелчком на кнопке ОК.
Предыдущая << 1 .. 36 37 38 39 40 41 < 42 > 43 44 45 46 47 48 .. 173 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100