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


Листинг 2.18. Файл scrlmet\wndproc.cpp


// ===================================== // Функция WndProc // =====================================

#define STRICT #include <windows.h> #include <stdio.h> #include <string.h>

void Print(HDC, int, char *);

static int cxChar, cyChar; static int cxCurrentPosition; static int cyCurrentPosition; static int nScrollPos;

LRESULT CALLBACK _export WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { static WORD cxClient, cyClient;

HDC hdc; // индекс контекста устройства PAINTSTRUCT ps; // структура для рисования static TEXTMETRIC tm; // структура для записи метрик // шрифта

switch (msg) { case WM_CREATE: { // Получаем контекст отображения, // необходимый для определения метрик шрифта hdc = GetDC(hwnd);

// Заполняем структуру информацией // о метрике шрифта, выбранного в // контекст отображения GetTextMetrics(hdc, &tm);

// Запоминаем значение ширины для // самого широкого символа cxChar = tm.tmMaxCharWidth;

// Запоминаем значение высоты букв с // учетом межстрочного интервала cyChar = tm.tmHeight + tm.tmExternalLeading;

// Инициализируем текущую позицию // вывода текста cxCurrentPosition = cxChar; cyCurrentPosition = 0;

// Освобождаем контекст ReleaseDC(hwnd, hdc);

// Начальное значение позиции nScrollPos = 0;

// Задаем диапазон изменения значений SetScrollRange(hwnd, SB_VERT, 0, 20, FALSE);

// Устанавливаем ползунок в начальную позицию SetScrollPos(hwnd, SB_VERT, nScrollPos, TRUE);

return 0; }

// Определяем размеры внутренней области окна case WM_SIZE: { cxClient = LOWORD(lParam); cyClient = HIWORD(lParam); return 0; }

// Сообщение от вертикальной полосы просмотра case WM_VSCROLL: { switch(wParam) { case SB_TOP: { nScrollPos = 0; break; } case SB_BOTTOM: { nScrollPos = 20; break; } case SB_LINEUP: { nScrollPos -= 1; break; } case SB_LINEDOWN: { nScrollPos += 1; break; } case SB_PAGEUP: { nScrollPos -= cyClient / cyChar; break; } case SB_PAGEDOWN: { nScrollPos += cyClient / cyChar; break; } case SB_THUMBPOSITION: { nScrollPos = LOWORD(lParam); break; } // Блокируем для того чтобы избежать // мерцания содержимого окна при // перемещении ползунка case SB_THUMBTRACK: { return 0; } default: break; }




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



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