Создание органа управления Up-Down
Орган управления Up-Down создается функцией CreateWindowEx на базе предопределенного класса окна UPDOWN_CLASS . При этом следует сохранить полученный от функции CreateWindowEx идентификатор для посылки окну органа Up-Down управляющих сообщений.
Вы можете также переместить изображение пиктограммы органа Up-Down из палитры редактора диалогов в проектируемую диалоговую панель. Если вы работаете с системой Microsoft Visual C++ версии 2.0 , не забудьте внести изменения в регистрационную базу данных, описанные в этой главе.
Для определения идентификатора окна органа управления Up-Down, расположенного в диалоговой панели, вы можете воспользоваться функцией GetDlgItem .
Есть еще один способ, который удобен при объединении органа Up-Down с каким-либо другим органом управления. Этот способ основан на использовании функции CreateUpDownControl :
HWND CreateUpDownControl( DWORD dwStyle, // стиль окна органа Up-Down int x, // расположение окна int y, int cx, // размеры окна int cy, HWND hParent, // иднтификатор родительского окна int nID, // идентификатор органа Up-Down HINSTANCE hInst, // идентифкатор приложения HWND hBuddy, // идентификатор сцепленного органа int nUpper, // верхняя граница значений int nLower, // нижняя граница значений int nPos); // начальное значение
Функция CreateUpDownControl выполняет несколько действий.
Прежде всего, она создает орган управления Up-Down с помощью функции CreateWindowEx на базе предопределенного класса окна UPDOWN_CLASS . Затем она устанавливает диапазон возможных значений и начальное значение, посылая окну органа управляющие сообщения. Затем функция CreateUpDownControl подключает орган Up-Down к органу управления с идентификатором hBuddy.
Остановимся подробнее на объединении органов управления .
Окно органа управления, с которым сцепляется орган Up-Down, называется сцепленным окном (buddy window ). Так как при сцеплении органы действуют как единое целое и находятся внутри одной рамки (рис.7.7), пользователю кажется, что он работает с одним органом управления.
Вы можете сцепить окна органов управления двумя различными способами.
Во-первых, для органа управления Up-Down можно задать стиль окна UDS_AUTOBUDDY . При этом последний сцепляется с органом управления, расположенным под ним (с предыдущим по порядку в шаблоне диалоговой панели).
Во-вторых, вы можете сцепить органы управления, послав окну органа Up-Down сообщение UDM_SETBUDDY . Именно этот способ и используется функцией CreateUpDownControl.
При создании органа Up-Down вы должны указывать обычные стили окна, такие как WS_CHILD , WS_BORDER и WS_VISIBLE , а также дополнительные, определяющие поведение этого органа управления:
Стиль | Описание |
UDS_ALIGNLEFT | Орган Up-Down будет выровнен по левой границе окна сцепленного с ним органа управления |
UDS_ALIGNRIGHT | То же, но по правой границе |
UDS_SETBUDDYINT | В заголовок окна органа управления, сцепленного с органом Up-Down, будет автоматически записываться текущее значение, установленное для органа Up-Down. Если же орган Up-Down сцеплен с органом Listbox, заголовок изменяться не будет. Вместо этого будет изменяться номер выделенного элемента списка |
UDS_NOTHOUSANDS | Используется вместе со стилем UDS_SETBUDDYINT. Указывает, что при отображении текущего значения не нужно разделять разряды тысяч десятичной точкой |
UDS_ARROWKEYS | Если указан этот стиль, для изменения текущего значения можно использовать клавиши перемещения курсора по вертикали |
UDS_HORZ | Размещение окна органа Up-Down по горизонтали |
UDS_WRAP | При достижении в процессе перебора значений верхней или нижней границы будет происходить переход, соответственно, к нижнему или верхнему значению. Таким образом, возможна организация циклического перебора возможных значений |
hwndUpDown = CreateUpDownControl ( WS_CHILD | WS_BORDER | WS_VISIBLE | UDS_WRAP | UDS_ARROWKEYS | UDS_ALIGNRIGHT | UDS_SETBUDDYINT, 0, 0, 0, 0, hdlg, IDC_UPDOWN, hInst, hwndEdit,10, 1, 1);
Обратите внимание, что мы не указали размеры и расположение окна органа Up-Down, так как при сцеплении они устанавливаются автоматически.