Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Приложение работает следующим образом: каждый раз при нажатии левой
кнопки мыши размер шрифта уменьшается на 1, а при нажатии на правую
кнопку мыши — увеличивается на 1. Соответственно будет меняться и вид
отображаемой в окне строки текста. Минимальное значение высоты шрифта
установлено равным 14 единицам, максимальное значение — 25. Шрифт
выбран Arial Суг нормальной толщины.

В этой программе, кроме демонстрации вывода текста шрифтами различных
размеров, показан вариант обработки сообщений WM_PAINT. ЭТО очень
важный момент, и поэтому акцентируем на нем особое внимание. Обработчик
сообщения WMPAINT оконной процедуры отвечает за правильное
отображение информации в окне приложения. Хорошо спроектированная
оконная процедура в любой момент времени должна отображать истинную
информацию, будь-то текст или другой графический образ на экране. Это
означает, что при любом изменении положения окна, его размеров, после
закрытия ниспадающего меню или диалогового окна, перекрывавшего окно
приложения, информация должна быть немедленно восстановлена.
Кстати, для работы многим может также понадобиться программа windraw
Продолжим. При запуске приложения функция updatewindow генерирует первое сообщение
WM_PAINT, вынуждающее программу перерисовать клиентскую об-
Программирование на ассемблере в Windows: от простого к сложному 277
ласть окна. Это же сообщение посылается приложению и в ряде других
случаев:

• при ВЫЗОВе функций InvalidateRect ИЛИ InvalidateRgn;
• при изменении размеров окна;
• при вызове функции Scroliwindow;
• после закрытия диалогового окна, перекрывавшего окно нашего приложения.

Очень удобно вывод данных выполнить в обработчике сообщения WMPAINT,
а предварительную обработку данных — в обработчиках других сообщений.

Это можно сделать, если, например, в обработчиках нажатия кнопок мыши
последней вызывать функцию InvalidateRect. ВЫЗОВ InvalidateRect
вынуждает операционную систему Windows пометить клиентскую область
окна приложения как недействительную и послать окну приложения
сообщение WM_PAINT. Последней в обработчике сообщения WM_PAINT
вызывается функция EndPaint, которая сообщает Windows, что перерисовка
Ш&ЁШ^ШШНк к нашей программе. В оконной процедуре используется три
обработчика сообщений: WM_PAINT, WM_LBUTTONDOWN, WM_RBUTTONDOWN.

Размер шрифта устанавливается в переменной vHeight. При нажатии левой
кнопки мыши размер шрифта будет уменьшаться, при нажатии правой
кнопки, наоборот, увеличиваться. Исходный текст обработчика сообщения
WM_LBUTTONDOWN оконной процедуры будет выглядеть следующим образом:
cmp uMsg, WM_LBUTTONDOWN
jne next_l
invoke GetciientRect, hWin, ADDR rect
cmp
jge
mov
jmp
down:
dec
wtext_l:
invoke
ret
vHeight, 14
down
vHeight, 25
wtext_l
vHeight
InvalidateRect, hWin, ADDR rect, TRUE

Обратите внимание на то, что в обработчике необходимо вызвать функцию
GetciientRect для инициализации струтуры rect. Если этого не сделать, то
последующий вызов функции InvalidateRect ни к чему не приведет! Как
видно из исходного текста обработчика, размер шрифта при каждом щелчке
левой кнопки мыши уменьшается на 1 в диапазоне от 25 до 14. Вызов функции
InvalidateRect вынуждает Windows генерировать сообщение WM_PAINT, И
обработчик этого сообщения прорисовывает текст с новым размером шрифта.
Обработчик нажатия правой кнопки мыши работает аналогично обработчику
левой, с той лишь разницей, что размер шрифта увеличивается от 14 до
25. Операции позиционирования текста и отображения его в окне приложения
выполняются в обработчике сообщения WMPAINT. Назначение контексту
устройства нового шрифта для вывода текста выполняется в следующем
фрагменте программного кода:

invoke CreateFont, vHeight, 0, 0, 0, 400, 0, 0, 0, myansi, myout,\
myclip, myq, mypitch, ADDR myf
mov myFont, EAX
invoke SelectObject, hdc,myFont


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru