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

         

Инициализация полосы просмотра


Для полосы просмотра определены понятия текущая позиция и диапазон изменения значений позиции. При передвижении движка вдоль полосы просмотра текущая позиция принимает дискретные значения внутри диапазона изменения значений позиции. Если движок находится в самом левом (для горизонтальной полосы просмотра) или самом верхнем (для вертикальной полосы просмотра) положении, текущая позиция равна минимальной. Если же движок находится в самом правом или самом нижнем положении, текущая позиция равна максимальной.

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

WinSendMsg(hwndYScroll, SBM_SETSCROLLBAR, (MPARAM)0, MPFROM2SHORT(0, YSIZE)); WinSendMsg(hwndXScroll, SBM_SETSCROLLBAR, (MPARAM)0, MPFROM2SHORT(0, XSIZE));

Здесь мы устанавливаем текущую позицию и диапазон изменения значений для вертикальной и горизонтальной полосы просмотра с идентификаторами окон hwndYScroll и hwndXScroll, соответственно.

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

Если полоса просмотра создавалась функцией WinCreateWindow, то для передачи сообщений полосе вы должны использовать идентификатор окна, полученный от этой функции. Если же полоса просмотра создавалась при помощи флагов FCF_VERTSCROLL или FCF_HORZSCROLL , для получения идентификатора этой полосы вам необходимо воспользоваться функциями WinWindowFromID и WinQueryWindow, как это показано ниже:

hwndYScroll = WinWindowFromID( WinQueryWindow(hWnd, QW_PARENT), FID_VERTSCROLL), hwndXScroll = WinWindowFromID( WinQueryWindow(hWnd, QW_PARENT), FID_HORZSCROLL),

Полосы просмотра, создаваемые как дочерние для окна Frame Window, имеют идентификаторы FID_VERTSCROLL (вертикальная полоса просмотра) и FID_HORZSCROLL (горизонтальная полоса просмотра).
Для получения идентификатора окна этих полос вы должны передать указанные значения в качестве второго параметра функции WinWindowFromID . Что же касается первого параметра этой функции, то через него следует передать идентификатор родительского окна.

Если идентификаторы окон полос просмотра определяются в функции главного окна приложения, идентификатор родительского окна можно получить при помощи функции WinQueryWindow . Для этого ей через первый параметр необходимо передать идентификатор окна hWnd, передаваемый в функцию главного окна приложения, а через второй параметр - константу QW_PARENT .

Итак, опишем параметры сообщения SBM_SETSCROLLBAR , предназначенного для установки позиции и диапазона изменений значений позиции.

Параметр mp1 задает новое значение позиции движка. Это значение должно лежать в пределах от минимального, определяемого младшим словом параметра mp2, и максимального, которое задается старшим словом этого же параметра.

В приведенном выше примере мы устанавливали для вертикальной полосы просмотра диапазон изменения значений от 0 до YSIZE, причем начальное значение было равно нулю. Это соответствует расположению движка в верхней части полосы просмотра.


Содержание раздела