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


Определение расположения окна - часть 3


LRESULT CALLBACK _export WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { HDC hdc; // индекс контекста устройства PAINTSTRUCT ps; // структура для рисования

// Координаты окна static WORD xPos; static WORD yPos;

switch (msg) { case WM_PAINT: { char buf[80];

hdc = BeginPaint(hwnd, &ps);

sprintf(buf, "%4.4dx%4.4d ", xPos, yPos);

// Выводим координаты окна TextOut(hdc, 0, 0, buf, 12);

EndPaint(hwnd, &ps); return 0; }

case WM_MOVE: { // X-координата левого верхнего угла // внутренней области окна xPos = LOWORD(lParam);

// Y-координата левого верхнего угла // внутренней области окна yPos = HIWORD(lParam);

// Отмечаем все окно как требующее // обновления InvalidateRect(hwnd, NULL, TRUE);

// Посылаем себе сообщение WM_PAINT UpdateWindow(hwnd); return 0; }

case WM_SIZE: case WM_LBUTTONDOWN: { RECT rc; char buf[80];

hdc = GetDC(hwnd);

// Определяем размеры прямоугольника, // ограничивающего окно GetWindowRect(hwnd, &rc);

sprintf(buf, "%4.4dx%4.4d %4.4dx%4.4d ", rc.top, rc.left, rc.right, rc.bottom);

// Выводим размеры внутренней области окна TextOut(hdc, 0, 20, buf, 25);

ReleaseDC(hwnd, hdc); return 0; }

case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hwnd, msg, wParam, lParam); }

Сообщение WM_MOVE передается окну, когда оно отображается функцией ShowWindow, или при изменении размера окна. Наш обработчик сообщения WM_MOVE сохраняет экранные координаты внутренней области окна в переменных с именами xPos и yPos. После сохранения координат функция окна объявляет все окно как требующее обновления и посылает само себе сообщение WM_PAINT, для чего вызывает функцию UpdateWindow:

case WM_MOVE: { xPos = LOWORD(lParam); yPos = HIWORD(lParam); InvalidateRect(hwnd, NULL, TRUE); UpdateWindow(hwnd); return 0; }

Обработчик сообщения WM_PAINT выводит координаты в левом верхнем углу внутренней области окна. Перемещая окно при помощи мыши, вы можете проследить за изменением текущих координат внутренней области окна.




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



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