Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Обучение VC++ / ЛекцииИнтернетС++ / Лекция_лаб_практикум.doc
Скачиваний:
64
Добавлен:
16.02.2016
Размер:
932.35 Кб
Скачать

Пример использования режимов преобразования координат

void CEeView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)

{

pDC->SetMapMode(MM_LOMETRIC);

pDC->SetViewportOrg(100,100);

CView::OnPrepareDC(pDC, pInfo);

}

В данном примере устанавливается режим преобразования координат MM_LOMETRIC, и начало координат переносится в точку (100;100).

Работа с окнами, содержащими полосы прокрутки

Если с помощью мыши уменьшить размеры обычного окна, то содержимое окна останется неподвижным относительно его левого верхнего уровня, а элементы, расположенные снизу и справа, исчезнут. После увеличения размеров окна эти элементы появятся вновь. Отсюда можно логично заключить, что окно больше, чем его область вывода (viewport), которую Вы видите на экране. Однако область вывода не обязана быть жестко привязана к левому верхнему краю окна. Благодаря функциям CWnd ScrollWindow и SetWindowOrg класс CScrollView позволяет перемещать область вывода в любое место окна, включая области, расположенные выше и левее.

Линейки прокрутки

Microsoft Windows позволяет легко отобразить линейки прокрутки по краям окна, однако Windows сама по себе не пытается каким-либо образом подключить эти линейки прокрутки к окну.

Эту задачу выполняет класс CScrollView. Функции-члены CScrollView обрабатывают сообщения WM_HSCROLL и WM_VSCROLL, которые линейки прокрутки посылают объекту “вид”. Эти функции перемещают область вывода внутри окна и выполняют необходимые вспомогательные действия.

Различные способы прокрутки

Класс CScrollView поддерживает один определенный способ прокрутки, в котором используется одно большое окно и маленькая область вывода. Для каждого элемента определено положение внутри большого окна. Например, если необходимо отобразить на экране 10000 адресных строк, то вместо окна длиной в 10 000 строк, вероятно, лучше иметь небольшое окно, поддерживающее алгоритм прокрутки, который выбирает для отображения столько строк, сколько можно отобразить в данный момент. В данном случае Вам необходимо создать свой класс “вид” с прокруткой, производный от CView

Microsoft Windows NT использует для представления логических координат 32 разрядные числа, так что пространство логических координат практически не ограничено. Но Windows 95 по прежнему использует некоторые 16 разрядные компоненты и потому представляет логические координаты с помощью 16 разрядных чисел, что ограничивает диапазон их значений от 32.768 до 32.767. Линейки прокрутки в обоих ОС посылают сообщения с 16 разрядными значениями.

Функция OnlnitialUpdate

Виртуальная функция OnlnitialUpdate важна потому, что к ней первой обращается каркас приложения после того, как полностью создано окно представления, но перед вызовом OnDraw, так что именно в OnlnitialUpdate следует задать логический размер и режима преобразования координат для вывода с прокруткой. Эти параметры устанавливаются с помощью функции CScrollView::SetScrollSizes.

Прием ввода с клавиатуры

Ввод с клавиатуры — двухэтапный процесс. Windows посылает окну сообщения WM_KEYDOWN и WM_KEYUP с кодами виртуальных клавиш (virtual key codes), но прежде, чем эти сообщения доходят до окна, они транслируются. Если введен символ ANSI (в результате чего генерируется сообщение WM_KEYDOWN), то функция трансляции проверяет состояние регистра клавиатуры и посылает сообщение WM_CHAR с соответствующим кодом символа – либо верхнего, либо нижнего регистра. Клавиши перемещения курсора и функциональные клавиши не имеют соответствующих кодов символов, поэтому для них трансляция не требуется. Окно получает только сообщения WM_KEYDOWN и WM_KEYUP.

Чтобы создать в классе “вид” обработчики этих сообщений, можно воспользоваться ClassWizard. Если Вы собираетесь принимать алфавитно-цифровые клавиши, обрабатывайте WM_CHAR, если Вам нужно обрабатывать нажатия и других клавиш – обрабатывайте WM_KEYDOWN. Библиотека MFC аккуратно предоставляет в качестве параметра функции-обработчика код символа или код виртуальной клавиши.