Определите по виду окон на рис. 4.3, были ли указаны при регистрации оконного класса флаги CS_HREDRAW, CS_VREDRAW. Опишите, как наличие или отсутствие этих флагов влияет на вид изображения при изменении размеров окна.

Ранее не было сказано, как часто посылаются сообщения WM_PAINT при изменении окна. Возможны следующие варианты:

1) сообщения посылаются с фиксированной частотой F;

2) сообщение посылается при каждом изменении ширины окна на К пикселов;

3) сообщения посылаются при изменении ширины окна на 1 пиксел, но с частотой не выше F.

Обоснуйте правильность одного из вариантов. Достаточно ли для обоснования приведенных на рис. 4.3 изображений?

Дополните проект CS_H REDRAW средствами измерения и индикации максимальной частоты поступления сообщений WM_P0INT.

Измерение временных интервалов

4. Часто во время работы приложения появляется необходимость в изменении формы курсора. Измените проект Minim таким образом, чтобы форма курсора изменялась при нажатии клавиш Shift и Ctrl. Заполнение полей, определяющих при регистрации оконного класса форму курсора, выполняется вызовом функции LoadCursor(NULL. IDC_ARR0W).

Замените курсор и пиктограмму по нажатии клавиш, используя необходимые функции. Опишите результат.

Не задавайте при регистрации оконного класса никакого курсора в структуре WNDCLASS: wc.hCursor - NULL. Опишите изменения, которые появились в работе программы.

Ознакомьтесь с функциями SetCl assLongC) и SetWindowLong(). Проверьте, можно ли изменить форму курсора при помощи одной из этих функций. На основании результатов сравнения трех вариантов напишите рекомендации программисту, желающему во время работы приложения изменять форму курсора со стрелки на песочные часы и обратно.

5. Необходимо проверить, как организована работа функции DispatchMessage() - вызывает ли она оконную процедуру сама или передает заявку операционной системе, чтобы та впоследствии вызвала ее. Это следует проверить экспериментально. Проверку можно построить на фиксации времени выполнения Di spatchMessage(), а можно поступить иначе. Для этого следует объявлять в проекте minim глобальную переменную Flag, в оконной функции записывать в переменную Flag единицу, перед вызовом DispatchMessageO выполнять оператор F1 ад = 0, а сразу после этого вызова проверять состояние переменной F1 ад. Если в переменной Flag будет записан ноль, значит, DispatchMessageC) только подает заявку на вызов оконной процедуры, если единица - фактически вызывает оконную процедуру в теле DispatchMessageO.


⇐ Предыдущая| |Следующая ⇒