Программирование для IBM OS2


Пространство отображения - часть 2


Вы можете указать идентификатор любого окна, созданного вашим приложением, или значение HWND_DESKTOP . В последнем случае будет получено пространство отображения, пригодное для рисования во всей области рабочего стола Workplace Shell.

Для получения так называемого кэшированного пространства отображения (которое мы будем использовать в приложениях, исходные тексты которых приведены в этой книге) для параметра hps необходимо указать значение NULLHANDLE. Подробнее о типах пространств отображения вы узнаете позже.

Что же касается параметра prclPaint, то вы можете указать его как NULL либо передать через этот параметр указатель на структуру типа RECTL, описывающую координаты прямоугольной области.

Если этот параметр указан как NULL, от функции WinBeginPaint будет получено пространство отображения, пригодное для рисования в любом месте окна, заданного параметром hwnd. В противном случае в структуру типа RECTL записываются размеры области, которая будет перерисована.

Структура RECTL определена следующим образом:

typedef struct _RECTL { LONG xLeft; // координата X левой границы // прямоугольной области LONG yBottom; // координата Y нижней границы области LONG xRight; // координата X правой границы области LONG yTop; // координата Y верхней границы области } RECTL; typedef RECTL *PRECTL;

В случае успеха функция WinBeginPaint возвращает идентификатор полученного пространства отображения. При ошибке возвращается значение NULLHANDLE.

Рассмотрим теперь второй способ получения пространства отображения, который должен использоваться во всех случаях, кроме обработки сообщения WM_PAINT . Этот способ основан на использовании функции WinGetPS :

HPS hps; . . . case WM_BUTTON1DOWN : { hps = WinGetPS (hWnd); . . . // Вызов функций рисования . . . WinReleasePS (hps); return 0; }

Функция WinGetPS возвращает идентификатор пространства отображения для окна, идентификатор которого передается ей в качестве единственного параметра.

Отметим, что после завершения процедур рисования вы должны освободить пространство отображения, полученное от функции WinGetPS , при помощи функции WinReleasePS (но не в коем случае не при помощи функции WinEndPaint , которая используется только в паре с функцией WinBeginPaint ).




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



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