Cтраница 2
![]() |
Окончательный вид диалогового окна мастера ClassWizard при создании обработчика сообщения WM MOUSEMOVE. [16] |
При перемещении указателя мыши внутри окна представления функция OnMouseMove вызывается через определенные промежутки времени. Добавленный в нее код обеспечивает решение двух основных задач. [17]
Когда нужно нарисовать или перерисовать окно представления, ему передают сообщение WM PAINT. Класс cview предоставляет функцию OnPaint, которая создает и подготавливает объект контекста устройства, а затем передает его в функцию OnDraw. Класс окна, который не порождается от cview, должен предоставлять собственную функцию OnPaint, выполняющую рисование содержимого окна. [18]
Программа позволяет рисовать прямые линии внутри окна представления. Чтобы нарисовать линию, необходимо поместить указатель мыши в предполагаемую начальную точку, нажать левую кнопку мыши, перетащить указатель в предполагаемую конечную точку и отпустить кнопку. [19]
![]() |
Идентификаторы стандартных указателей Windows, которые можно передавать функции Loadstandardcursor. [20] |
Чтобы пользователь мог рисовать линии внутри окна представления с помощью мыши, программа должна реагировать на события, происходящие внутри этого окна. Для обработки сообщения, передаваемого мышью, в класс представления необходимо добавить функцию обработки сообщений. [21]
Например, если указатель находится внутри окна представления, то при нажатии левой кнопки мыши передается идентификатор WM LBUTTONDOWN. [22]
Затем вызывается функция updateAllviews, очищающая окно представления. [23]
Заметим: рекурсивный узор полностью заполняет окно представления, следовательно, значения переменных, используемых для его создания, зависят от размера окна. Они устанавливаются в ответ на сообщение WM SIZE, передаваемое при первичном создании окна и при каждом изменении его размеров. [24]
Функция OnCreate вызывается после первоначального создания окна представления, но перед тем, как оно станет видимым. [25]
Если размеры растрового изображения превышают размеры окна представления, то Windows автоматически отсекает часть, выходящую за пределы окна. [26]
Функция OnSetFocus вызывается всякий раз, когда окно представления получает фокус ввода, в частности, при первоначальном создании окна представления и при каждом переключении на программу Echo после работы в другой программе. Функция OnSetFocus вызывает функцию CreateSolidCaret класса CWnd для создания курсора, передавая этой функции значения его ширины и высоты. Затем она вызывает функцию CWnd: : SetCaretPos, чтобы поместить курсор в нужную позицию. Так как вновь созданный курсор невидим, вызовите функцию CWnd: : ShowCaret, чтобы его отобразить. [27]
В действительности система удаляет только ту часть окна представления, которую нужно перерисовать, например, закрытую другим окном. [28]
Виртуальная функция OnUpdate вызывается при первоначальном создании окна представления, а также всякий раз, когда функция CTextDemoDoc: : OnOptionsFont обращается к CDocument: : UpdateAllViews после выбора нового шрифта ( о функции OnUpdate рассказывалось в гл. Функция OnUpdate устанавливает размер прокручиваемого документа ( т.е. полный размер основной части текста), полученный исходя из размеров нового шрифта. [29]
Функция OnDraw вызывается при рисовании или перерисовке окна представления. CScrollView), то переданный в него объект контекста устройства настраивается на текущую позицию прокрутки документа. [30]