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


Приложение MOUSENC - часть 3


hdc = GetDC(hwnd);

// Подготавливаем текстовую строку, содержащую // координаты курсора мыши nSize = wsprintf(szBuf, "(%-3d, %-3d)", xPos, yPos);

// Выбираем шрифт с фиксированной шириной букв SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT));

// Выводим оконные координаты курсора мыши TextOut(hdc, cxChar, cyChar, szBuf, nSize);

ReleaseDC(hwnd, hdc); break; }

// Двойной щелчок левой клавишей мыши // завершает работу приложения case WM_LBUTTONDBLCLK: case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hwnd, msg, wParam, lParam); }

При создании окна функция окна получает сообщение WM_CREATE. Обработчик этого сообщения выбирает системный шрифт с фиксированной шириной букв и определяет метрики выбранного шрифта. Метрики шрифта сохраняются для дальнейшего использования.

В самом начале обработчика сообщения WM_NCHITTEST имеется строка, закрытая символом комментария:

// return HTCAPTION;

Если убрать комментарий, обработчик примет следующий вид:

case WM_NCHITTEST: { return HTCAPTION; }

В этом случае в каком бы месте окна вы ни щелкнули мышью, Windows будет думать, что вы щелкнули в области заголовка окна. В этом случае Windows вызовет процедуру перемещения окна, которая обычно вызывается, когда вы перемещаете окно за его заголовок.

Фактически здесь используется объектная ориентированность Windows, позволяющая вам подменить метод, с помощью которого Windows определяет расположение курсора мыши относительно элементов окна.

Как это можно использовать на практике?

Вы, например, можете создать окно, не имеющее заголовка, но которое тем не менее можно перемещать при помощи мыши. Вспомните внешний вид, который можно придать стандартному приложению Windows с именем Clock (рис. 6.2).

Рис. 6.2. Приложение Clock

Несмотря на то что главное окно приложения Clock в данном случае не имеет заголовка, его все же можно перемещать по экрану. Аналогичного эффекта можете добиться и вы, если соответствующим образом обработаете сообщение WM_NCHITTEST.




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



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