Операционная система Microsoft Windows 3.1 для программиста -том 1


Приложение KBMSG - часть 5


SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT));

Эти функции будут описаны позже. Сейчас мы только отметим, что после выполнения приведенной выше строки системный шрифт с переменной шириной букв будет заменен на системный шрифт с фиксированной шириной букв. С таким шрифтом проще работать, так как можно использовать известные вам по MS-DOS методы вывода таблиц.

После выбора шрифта обработчик сообщения WM_CREATE определяет метрики шрифта. В переменные cxChar и cyChar записывается соответственно ширина и высота букв.

Далее контекст отображения освобождается.

В поле top переменной rect типа RECT записывается координата верхней границы сворачиваемой области главного окна приложения:

rect.top = 3 * cyChar;

Выше этой границы, в полосе, ширина которой равна высоте символа, умноженной на 3, будет расположен заголовок таблицы. Этот заголовок состоит из строки названий полей таблицы и строки подчеркивания.

Область окна, расположенная ниже, будет использована для отображения параметров сообщений. По мере того как вы будете нажимать на клавиши, в этом окне будут появляться строки параметров сообщений. При появлении каждой новой строки вся область окна до границы заголовка будет смещена вверх. Новая строка будет добавлена в нижней части главного окна приложения. Словом, нижняя часть окна будет действовать как хорошо знакомая вам консоль MS-DOS.

При отображении окна функцией ShowWindow функция окна получает среди прочих сообщение WM_SIZE. Обработчик этого сообщения определяет координаты правого нижнего угла окна, сохраняя их в переменной rect:

rect.right = LOWORD(lParam); rect.bottom = HIWORD(lParam);

Поле bottom, содержащее y-координату нижней границы окна, будет использовано для вывода параметров сообщения в нижней части окна функцией TextOut.

После определения координат обработчик сообщения WM_SIZE объявляет все окно как требующее перерисовки и генерирует сообщение WM_PAINT, вызывая функцию UpdateWindow:

InvalidateRect(hwnd, NULL, TRUE); UpdateWindow(hwnd);

Это приводит к тому, что при изменении размеров окна содержимое окна стирается и в него выводятся только две строки заголовка.




Начало  Назад  Вперед



Книжный магазин