Глава 2. Дочерние окна
Дочерние окна (т.е. окна с
установленным флагом стиля ws_child)
предназначены для деления площади
клиетской части окна на более мелкие
функциональные области. Дочерними окнами
являются, например, кнопки или поля ввода
текста. В большинстве случаев для создания
дочерних окон использует уже готовые
оконные классы, которые условно можно
разбить на несколько групп: стандартные (standard)
— это стандартные элементы интерфейса Windows
(кнопки, списки и т.д.); элементы общего
пользования (common controls — это панели
инструментов, статусные строки и т.д.);
библиотечные элементы, которые становятся
доступными, если в систему установить какую-либо
библиотеку, собержащую эти элементы.
К стандартым управляющим
элементым (стандартным дочерним окнам)
относят следующие: кнопки, списки строк,
раскрывающиеся списки. поля ввода текста,
полосы прокрутки и статический текст. Для
их создания используется следующий вызов
функции CreateWindowEx:
hwndContol:=CreateWindowEx(exStyle, className, windowText, style or ws_child
or ws_visible, xPos, yPos, nWidth, nHeight, wndParent,
conrol_id, hInstance, lpParam);
|
где:
- exStyle
- набор флагов расширенного стиля
дочернего окна
- className
- одна из следующих строк текста: button,
listbox, combobox, static, scrollbar, edit
- windowText
- заголовок окна. Для кнопок — это надпись
на кнопке, для полей ввода — начальный
текст
- style
- набор флагов стиля, специфичных для
данного класса
- xPos, yPos, nWidth, nHeight
- это соответственно: горизонтальная,
вертикальная координаты окна, ширины и
высота. Координаты в клиентских
координатах окна-родителя
- wndParent
- описатель окна-родителя
- conrol_id
- некоторое целое число, уникальное для
каждого дочернего окно, которое
позволяет легче идентифицировать
дочерние окна при обработке сообщений от
них
- hInstance
- описатель текущего процесса
- lpParam
- указтаель на некоторые данные. В
большинстве случаев равен nil
Cmандартные элементы управления посылают
сообщения wm_command или wm_notify при каких-либо
действиях со стороны пользователя (подробнее
см. в описаниях каждого класса). В
стандартных элементах по умолчанию
используется системный шрифт, чтобы
изменить его на более приемлемый, нужно
послать окну сообщение wm_setfont:
SendMessage(wndControl,wm_setfont,font,0);
где font — описатель соответствующего
шрифта, который можно получить либо из
функции CreateFont, либо из GetStockObject
Наверх
Подробнее
о каждом классе
Пример создания кнопки шириной 75
пикселов, высотой 25 пикселов, с текстом «Кнопка»:
WndButton:=CreateWindowEx(0,'button','Кнопка',
BS_PUSHBUTTON or WS_VISIBLE or WS_CHILD,//стиль кнопки
10, 10, 75, 25,
mainWnd, 0, hInstance, nil )//control_id равен нулю
|
Примеры создания кнопок (создается окно с
различными типами кнопок) здесь.
Параметр style функции CreateWindowEx должен
содержать комбинацию из следующих флагов:
- BS_PUSHBUTTON
- создается обычная «нажимаемая» (push)
кнопка
- BS_DEFPUSHBUTTON
- отличается от bs_pushbutton тем, что имеет
более толстую границу
- BS_CHECKBOX
- создается кнопка-переключатель.
Состояние кнопки должна отслеживать и
переключать программа
- BS_AUTOCHECKBOX
- отличается от редыдущего тем, что
переключением кнопки занимается Windows
- BS_3STATE
- создается кнопка-переключатель c тремя
возможными состояниями. Переключать
состояния должна программа
- BS_AUTO3STATE
- отличается от предыдущей тем, что
переключением состояний занимается Windows
- BS_RADIOBUTTON
- создается радио-кнопка. Состояние
кнопки должна отслеживать и переключать
программа
- BS_RADIOBUTTON
- отличается от предыдущей тем, что
переключением состояний занимается Windows
- BS_OWNERDRAW
- создается кнопка, внешний вид которой
должна контролировать программа
- BS_GROUPBOX
- создается контейнер с заголовком,
который может содержать другие элементы.
Никаких сообщений не посылает
- BS_LEFTTEXT
- помещает подпись к радио-кнопке или
флажку слева
- BS_BITMAP
- создается кнопка с растровым
изображением. Для изменения/получения
изображений следует воспользоваться
сообщением BM_SETIMAGE или BM_GETIMAGE
- BS_ICON
- создается кнопка с пиктограммой. Для
изменения/получения изображений следует
воспользоваться сообщениями BM_SETIMAGE и BM_GETIMAGE
[пример использования — здесь]
- BS_BOTTOM
- помещает текст кнопки в нижней части
ограничивающего прямоугольника
- BS_CENTER
- центрирует текст кнопки
- bs_left
- помещает текст кнопки в левой части
ограничивающего прямоугольника
- bs_right
- помещает текст кнопки в правой части
ограничивающего прямоугольника
- bs_top
- помещает текст кнопки в верхней части
ограничивающего прямоугольника
- bs_vcenter
- помещает текст кнопки в центральной (по
вертикали) части ограничивающего
прямоугольника
- bs_multiline
- преносит текст на другую строчку, если
он не помещается на кнопке в ширину
- bs_pushlike
- делает флажки или радио-кнопки похожими
на «нажимаемые» (push) кнопки
- bs_text
- определяет что кнопка содержит текст
По умолчанию кнопка реагирует
только на нажатия кнопок мыши и клавиши «пробел»,
если вы хотите, перемещаться между
элементыми при помощи клавиши Tab или чтобы
кнопка реагировала на нажатия «Enter», нужно
изменить оконную процедуру данной кнопки (как
это сделать, будет рассказано позже). Для
переключения состояний радио-кнопок или
флажков следует послать сообщение bm_setcheck
нужной кнопке, чтобы узнать состояние
кнопки, нужно послать сообщение bm_getcheck.Пример:
SendMessage(wndCheckBox,BM_SETCHECK,BST_CHECKED,0);//включить флажок
SendMessage(wndCheckBox,BM_SETCHECK,BST_UNCHECKED,0);//выключить флажок
SendMessage(wndRadioBtn,BM_SETCHECK,BST_CHECKED,0);//включить радио-кнопку
SendMessage(wndCheckBox,BM_SETCHECK,BST_INDETERMINATE,0);{перевести флажок стиля
bs_3state или bs_auto3state в неопределенное состояние}
chkState:=SendMesasge(wnd,CheckBox,bm_getcheck,0,0);{получить состояние кнопки.
chkState равно одной из констант : bst_checked, bst_unchecked, bst_indeterminate}
|
Реагирование на сообщения от кнопок
Кнопка посылает родительскому окну
уведомляющие сообщения wm_command. При этом
HiWord(wParam) содержит код уведомления
LoWord(wParam) содержит идентификатор
элемента, пославшего сообщение
lParam содержит описатель элемента,
пославшего сообщение.
Вот список кодов уведомления кнопок (bn_xxx -
константы)
- bn_clicked
- по кнопке щелкнули мышью
- bn_dblclk
- по кнопке произвели двойной щелчок
- bn_disable
- кнопка стала недоступной
- bn_hilite
- поддерживается для совместимости с
ранними версиями Windows
- bn_unhilite
- поддерживается для совместимости с
ранними версиями Windows
- bn_killfocus
- кнопка потеряла фокус
- bn_setfocus
- кнопка получила фокус
- bn_paint
- поддерживается для совместимости с
ранними версиями Windows
- bn_pushed
- поддерживается для совместимости с
ранними версиями Windows
- bn_unpushed
- поддерживается для совместимости с
ранними версиями Windows
Сообщения для кнопок
- bm_getcheck
-
- bm_setcheck
-
- bm_getimage
-
- bm_setimage
-
- bm_getstyle
-
- bm_setstyle
-
- bm_click
Наверх
Пример создания поля ввода шириной
100 пикселов, высотой 25, с начальным текстом «Edit
Control"
WndEdit:=CreateWindowEx(ws_ex_clientedge,'edit','Edit Control',
es_autohscroll or ws_visible or ws_child or ws_border,//стиль поля
10, 10, 100, 25,
mainWnd, 0, hInstance, nil )//control_id равен нулю
|
Параметр style функции CreateWindowEx должен
содержать комбинацию из следующих флагов:
- es_multiline
- создается многострочное поле ввода. По
умолчанию (без этого флага) создается
однострочное поле
- es_left, es_center, es_right
- эти флаги задают выравнивание тексты в
поле
- es_lowercase
- создается поле, текст в которе будет
всегда вводиться в нижнем регистре
- es_uppercase
- создается поле, текст в которе будет
всегда вводиться в верхнем регистре
- es_oemconvert
- вводимый текст будет преобразовываться
в oem-формат
- es_autohscroll
- создается поле, текст в котором будет
автоматически пркручиваться по
горизонтали, когда точка ввода текста
приблизится к краю окна. Если этот флаг не
задавать, то длина вводимого текста будет
ограничена шириной поля
- es_autovscroll
- аналогично предыдущему, только для
вертикальной прокрутки
- es_number
- создается поле, в которое можно вводить
только цифры
- es_readonly
- создается поле, предназначенное только
для чтения
- es_nohidisel
- создается поле, в котором выбранный
текст подсвечивается, даже если поле не
имеет фокуса
- es_password
- создается поле, в котором все вводимые
символы отображаются при помощи одного
символа. По умолчанию этим символом
служит звездочка, однако Вы можете при
помощи сообщения em_setpasswordchar изменить
его на любой другой
- es_wantreturn
- заставляет Windows переводить строку, когда
пользователь нажимает «Enter»
По умолчанию поле ввода не имеет границы,
поэтому в параметр style функции CreateWindowEx
нужно добавить флаг ws_border, кроме того
поле ввода имеет плоский вид и для придания
ему «трехмерности», нужно добавить флаг
раширенного стиля ws_ex_clientedge в параметр exStyle
той же функции (см. вышеприведенный пример)
Обработка сообщений от поля ввода
Поле ввода посылает родительскому
окну уведомляющие сообщения wm_command. При
этом: HiWord(wParam) содержит код уведомления
LoWord(wParam) содержит идентификатор
элемента, пославшего сообщение
lParam содержит описатель элемента,
пославшего сообщение.
Вот список кодов уведомления полей ввода (en_xxx
- константы). Из имени константы видно, о чем
она сообщает.
- en_change
-
- en_errspace
- посылается при переполнении буфера
текста
- en_maxtext
- посылается при переполнении буфера
текста
- en_hscroll
-
- en_killfocus
-
- en_setfocus
-
- en_update
-
- en_vscroll
-
Кроме этих сообщений,
родительскому окну посылается сообщение wm_ctlcoloredit
перед перерисовкой поля ввода. Это
сообщение содержит описатель графического
контекста перерисовываемого элемента и его
описатель. Родительское окно может
использовать эти данные для изменения
цвета текста и фона текста поля ввода. Это
осуществляется при помощи функций SetBkColor
и SetTextColor. Например
...
SetBkColor(wParam,color);//цвет фона
SetTextColor(wParam, color2);//цвет текста
...
|
Управление полем ввода
Вы можете применять к полю ввода обычные
оконные функции :
EnableWindow — для изменения доступности окна;
SetFocus — для перемещения фокуса на данное
поле ввода.
Для получения текста поля ввода следует
использовать GetWindowText.
Для изменения текста в поле ввода следует
использовать функцию SetWindowText
Как всегда, управление полем ввода
осуществляется при помощи сообщений.
Сообщения специфичные для поля ввода имеют
префикс em_, например, em_undo.
Вот полный список этих сообщений (объяснены
лишь некоторые, подробности смотри во
встроенном справочнике)
- em_canundo
- возвращает true, если поле ввода способно
отменить пред. операцию. Непосредственно
отмена производится посылкой сообщения em_undo
- em_charformpos
-
- em_emptyundobuffer
- очищает буфер отменв изменений
- em_fmtlines
-
- em_getfirstvisibleline
-
- em_gethandle
-
- em_getlimittext
- возвращает текущую предельную длину
вводимого текста
- em_getline
- копирует все символы некоторой строки в
буфер и возвращает количество
скопированных символов
- em_getlinecount
- возвращает число строк в поле ввода
- em_getmargins
- возвращает ширину левого и правого
полей
- em_getmodify
- возвращает флаг модификации текста в
поле ввода
- em_getpasswordchar
- возвращает символ, отображаемый в поле с
установленным флагом es_password
- em_getrect
-
- em_getsel
- возвращает начальную и конечную позиции
текущей выборки
- em_getthumb
-
- em_getwordbreakproc
-
- em_linefromchar
-
- em_linelength
- возвращает : в однострочном поле — длину
текста, в многострочном — длину
определенной строки
- em_linescroll
-
- em_posfromchar
- возвращает клиентские координаты
определенного символа
- em_replacesel
-
- em_scroll
-
- em_scrollcaret
-
- em_sethandle
-
- em_setlimittext
- устанавливает предельную длину текста
- em_setmargins
-
- em_setmodify
-
- em_setpasswordchar
- устанавливает символ, отображаемый в
поле ввода стиля es_password
- em_setreadonly
- устанавливает или удаляет флаг стиля es_readonly
- em_setrect
-
- em_setrectnp
-
- em_setsel
-
- em_settabstops
-
- em_setwordbreakproc
-
- em_undo
- отменяет сделанные изменения
- wm_clear
- удаляет выбранный текст
- wm_copy
- копирует выбранный текст в ClipBoard
- wm_cut
- вырезает выбранный текст в ClipBoard
- wm_getfont
- запрашивает текущий шрифт поля ввода
- wm_gettext
- устанавливает шрифт поля ввода
Наверх
Пример создания списка:
WndListbox:=CreateWindowEx(ws_clientedge,'listbox','',
lbs_notify or ws_visible or ws_child or ws_border,//стиль списка
10, 10, 100, 200, //координаты по x и y, ширина, высота
mainWnd, 0, hInstance, nil )//control_id равен нулю
|
Здесь
находится пример использования списка.
Параметр style функции CreateWindowEx
должен содержать комбинацию следующих
флагов:
- lbs_disableNoScroll
- полоса прокрутки показавается всегда
- lbs_extendedSel
- допускается испоьзование доплнительных
возможностей при выборе элементов, когда
допускается выбор нескольких. Например,
использование клавиши Shift при выборе
- lbs_hasStrings
- определяет то, что элементы списка
состоят из строк. Используется для
списков, отображаемых программой
- lbs_multiColumn
- создается список с несколькими
столбцами, при этом возможна только
горизонтальная прокрутка
- lbs_multiplesel
- создается список с возможностью
одновременного выбора нескольких
элементов
- lbs_noIntegralHeight
- создается список без автоматической
корректировки высоты, которая
применяется по умолчанию. Корректировка
происходит для того, чьобы в области
списка помещались строки целиком по
высоте, например, если в список вмещается
полностью пять элементов, а шестой не
полностью, то вертикальный размер списка
будет уменьшен, чтобы вместить только
пять
- lbs_notify
- создается список, отсылающий
уведомляющие сообщения окну-владельцу
- lbs_nosel
- создается список, элементы которого не
выделяются цветом
- lbs_noredraw
- создается список, который не
перерисовывается автоматически при
каких-либо изменениях. Обычно не следует
применять этот флаг
- lbs_ownerDrawFixed
- создается список, отображаемый
программой, при этом все элементы имеют
одинаковую высоту
- lbs_ownerDrawVariable
- создается список, отображаемый
программой, при этом все элементы имеют
переменную высоту
- lbs_sort
- создается отсотртированный список. При
добавлении нового элемента, он будет
автоматически помещен а нужную позицию
- lbs_wantKeyboardInput
- определяет, что окно-владелец получает
сообщение wm_vkeytoitem, когда пользователь
нажимает клавишу на списке, когда тот
имеет фокус
Кроме этого, список, по умолчанию,
не имеет границы и не посылает уведомляющих
сообщениq родительскому окну, поэтому нужно
устанавливать флаг ws_border для получения
границы. Если вы хотите пертаскивать список,
то добавьте флаги ws_sizebox и ws_caption. Для
придания списку «трехмерности» добавьте
флаг ws_ex_clientedge в параметр exStyle
функции CreateWindowEx
Обработка сообщений от списка
Список с установленным флагом
стиля lbs_notify посылает родительскому
окну уведомляющие сообщения в составе
сообщения wm_coomand. При этом:
HiWord(wParam) содержит код
уведомления
LoWord(wParam) содержит идентификатор
элемента, пославшего сообщение
lParam содержит описатель элемента,
пославшего сообщение.
Вот список кодов уведомления списка (lbn_xxx
константы)
- lbn_dblclk
- пользователь дважды щелкнул на элементе
списка
- lbn_errspace
- посылается при переполнении буфера
текста
- lbn_killfocus
- окно списка потеряло фокус
- lbn_selcancel
- пользователь сбросил выделение в списке
- lbn_selchange
- выбранный(-ые) элемент(-ы) изменились
- lbn_setfocus
- список получил фокус клавиатуры
Кроме этих сообщений, родительскому окну
посылается сообщение wm_ctlcolorlistbox перед
перерисовкой окна списка. Это сообщение
содержит описатель графического контекста
окна перерисовываемого элемента и его
описатель. Родительское окно может
использовать эти данные для изменения
цвета текста и фона текста поля ввода при
помощи функций SetBkColor и SetTextColor.
Например
...
SetBkColor(wParam,color);//цвет фона
SetTextColor(wParam, color2);//цвет текста
...
|
Управление списком
Так как список является окном Windows,
вы можете применять к нему все оконные
функции и общие оконные сообщения. Кроме
общих, списком поддерживаются также и
частные сообщения, начинающиеся с префикса lb_.
Далее приведен список всех lb_xxx
сообщений, пояснения даны к наиболее часто
употребляемым. Отдельно описано сообщение lb_dir,
позволяющее добавлять в список имена
файлов/каталогов/дисков
- lb_addfile
-
- lb_addstring
-
- lb_deletestring
- удаляет заданную строку из списка
- lb_dir
- добавляет в список имена файлов из
текущего каталога
- lb_findstring
- ищет в списке строку, начинающуюся с
заданных символов
- lb_findstringexact
-
- lb_getanchorindex
-
- lb_getcaretindex
-
- lb_getcount
- возвращаетчисло элементов в списке
- lb_getcursel
- возвращает индекс выбранного элемента
списка
- lb_gethorizontalextent
-
- lb_getitemdata
- возвращает 32 битное целое, связанное с
определенным элементом списка
- lb_getitemheight
-
- lb_getitemrect
-
- lb_getlocale
-
- lb_getsel
- запрос: выделен ли элемент?
- lb_getselcount
- возвращает общее число выделенных
элементов в списке с возможностью
можественного выбора
- lb_getselitems
-
- lb_gettext
- возвращает текст заданного элемента
- lb_gettextlen
- возвращает длину текста заданного
элемента
- lb_gettopindex
- возвращает номер первого видимого
элемента списка
- lb_initstorage
-
- lb_insertstring
- вставляет строку в заданное место
списка
- lb_itemfrompoint
-
- lb_resetcontent
- стирает содержимое списка
- lb_selectstring
-
- lb_selitemrange
-
- lb_selitemrangeex
-
- lb_setanchorindex
-
- lb_setcaretindex
-
- lb_setcolumnwidth
- устанавливает ширину колонки в списке с
установлкнным флагом стиля lbs_multicolumn
- lb_setcount
-
- lb_setcursel
- устанавливает новый выбранный элемент в
списке, при необходимости список
прокручивается
- lb_sethorizontalextent
-
- lb_setitemdata
- устанавливает значение 32 битного целого,
связанного с конкретным элементом
- lb_setitemheight
-
- lb_setlocale
-
- lb_setsel
- выбирает или отменяет выделение в
списке с возможностью множественного
выбора
- lb_settabstops
-
- lb_settopindex
Подробнее о сообщении lb_dir, которое
позволяет добавлять в список имена файлов
из текущего каталога.
Параметры wParam и lParam этого сообщения
должны иметь следующие значения:
- wParam
- атрибуты добавляемах в список файлов.
Должен содержать комбинацию следующих
флагов:
- ddl_readwrite
- добавить обычные файлы для чтения-записи
без учета каких-либо атрибутов. Этот
флаг действует по умолчанию
- ddl_directory
- добавить в список поддкатклоги в
текущем каталоге. Имена подкаталогов
отображаются в квадратных скобках [directory]
- ddl_drives
- добавить в список имена дисков. Диски
отображаются в следующем виде [-C-]
- ddl_exclusive
- добавить в список файлы только с
указанными атрибутами
- ddl_archive, ddl_hidden, ddl_readonly, ddl_system
- включать в список файлы со следующими
атрибутами соответственно: архивные,
скрытые, только для чтения, системные
файлы
- lParam
- указатель на строку, содержащую маску,
по которой будут фильтроваться файлы,
например, *.*. Так как lParam имеет тип Integer,
то необходимо приведение типов: Integer(PChar('*.*'))
Список обязательно должен быть с
установленным флагом стиля lbs_sort, иначе
имена файлов, каталогов, дисков будут
выводится вперемешку. Cообщение возвращает lb_errspace,
если для размещения имен файлов не хватает
места в памяти
Кроме этого сообщения, для добавления
файлов в список существует функция DlgDirList,
которая добавляет в указанный при вызове
список имена файлов, найденных по заданному
пути. Вот описание этой функции:
function DlgDirList(hDlg: HWND; lpPathSpec: PChar; nIDListBox, nIDStaticPath:
Integer; uFileType: UINT): Integer;
где:
- hDlg
- описатель списка
- lpPathSpec
- строка, содержащая путь и\или имя файла (в
имени файла можно применять символы *
и ?). Путь должен задаваться в полном
виде
- nIDListBox
- определяет идентификатор списка, не
должен быть равен нулю
- nIDStaticPath
- определяет идентификатор окна класса 'static'
для отображения в нем текущего каталога,
если равен нулю, то функция предполагает,
что путь нигде отображать не нужно
- uFileType
- комбинация ddl_xxx констант (список см.
выше)
Наверх
Параметр style вызова функции CreateWindowEx
должен содержать комбинацию следующих
флагов (кроме того не забывайте о флагах ws_child
и ws_visible)
- cbs_dropdown
- создается комбинированный список,
состоящий из поля ввода и выпадающего
блока
- cbs_dropDownList
- создается комбинированный список,
состоящий из выпадающего блока,
пользователь может делать выбор только
из предопределенных элементов
- cbs_simple
- создается комбинированный список,
состоящий из поля ввода и обычного (не
выпадающего) списка
- cbs_autoHScroll
- автоматически прокручивать текст в поле
ввода, когда точка ввода переместится
вплотную к правой границе
- cbs_disableNoScroll
- всегда показывать вертикальную полосу
пркрутки в блоке списка
- cbs_hasStrings
- определяет, что комбинированный список,
отображаемый пользователем (owner-draw)
содержит строки текста
- cbs_noIntegralHeight
- создается список без автоматической
корректировки высоты, которая
применяется по умолчанию. Корректировка
происходит для того, чьобы в области
блока списка помещались строки целиком
по высоте, например, если в список
вмещается полностью пять элементов, а
шестой не полностью, то вертикальный
размер списка будет уменьшен, чтобы
вместить только пять
- cbs_lowerCase
- автоматически конвертирует текст во
всем блоке в нижний регистр
- cbs_upperCase
- автоматически конвертирует текст во
всем блоке в верхний регистр
- cbs_OEMconvert
- автоматически конвертирует текст во
всем блоке в формат OEM
- cbs_ownerDrawFixed
- создается список c элементами
одинаковой высоты, элементы которого
должен отображать пользователь
- cbs_ownerDrawVariable
- создается список c элементами
переменной высоты, элементы которого
должен отображать пользователь
- cbs_sort
- создается автоматически сортирующийся
список
Обработка сообщений от комбинированного
списка
Комбинированный список посылает
родительскому окну уведомляющие сообщения
в составе сообщения wm_coomand. При этом:
HiWord(wParam) содержит код
уведомления
LoWord(wParam) содержит идентификатор
элемента, пославшего сообщение
lParam содержит описатель элемента,
пославшего сообщение.
Вот список кодов уведомления
списка (сbn_xxx константы) cbn_closeup
посылается, когда закрывается выпадающий
список cbn_dblclk посылается, когда
пользователь дважды щелкнет на элементе
простого списка (simple) cbn_dropdown посылается,
когда открывается выпадающий список cbn_editchange
посылается, когда пользователь изменил
текст в поле ввода или выбрал элемент
списка cbn_editupdate посылается, когда
пользователь изменил текст в поле ввода или
выбрал элемент списка cbn_errspace
посылается при переполнении cbn_killfocus
посылается, когда список теряет фокус
клавиатуры cbn_selchange посылается, когда
текущая выборка была изменена cbn_selendcancel
посылается, когда пользователь закрыл
выпадающий блок, не выбрав ничего cbn_selendok
посылается, когда пользователь закрыл
выпадающий блок, выбрав что-либо cbn_setfocus
посылается, когда комбинированный список
получил фокус клавиатуры
Также родительскому окну посылаются
сообщения:
- wm_drawitem
- для отрисовки элемента комбнированного
списка, отображаемого программой
- wm_measureitem
- посылается при создании элемента в
списке, отображаемого программой
Управление комбинированным списком
Эти сообщения почти аналогичны сообщениям
для listbox, поэтому я не буду их разъяснять
- cb_addstring
-
- cb_deletestring
-
- cb_dir
-
- cb_findstring
-
- cb_findstringexact
-
- cb_getcount
-
- cb_getcursel
-
- cb_getdroppedcontrolrect
-
- cb_getdroppedstate
-
- cb_getdroppedwidth
-
- cb_geteditsel
-
- cb_getextendedui
-
- cb_gethorizontalextent
-
- cb_getitemdata
-
- cb_getitemheight
-
- cb_getlbtext
-
- cb_getlbtextlen
-
- cb_getlocale
-
- cb_gettopindex
-
- cb_initstorage
-
- cb_insertstring
-
- cb_limittext
-
- cb_resetcontent
-
- cb_selectstring
-
- cb_setcursel
-
- cb_setdroppedwidth
-
- cb_seteditsel
-
- cb_setextendedui
-
- cb_sethorizontalextent
-
- cb_setitemdata
-
- cb_setitemheight
-
- cb_setlocale
-
- cb_settopindex
-
- cb_showdropdown
-
Наверх
Статические окна служат для отображения
текстовой информации, подобно компоненту TLabel
из Delphi. Статические окна создаются
следующим образом:
staticText:=CreateWindowEx(0,'static','This is static text',
ws_visible or ws_child,//стиль окна
10, 10, 100, 25,
mainWnd, 0, hInstance, nil )//control_id равен нулю
|
Параметр style функции CreateWindowEx
должен содержать комбинацию следующих
флагов:
- ss_blackframe, ss_grayframe, ss_whiteframe, ss_etchedhorz,
ss_etchedvert, ss_etchedframe
- определяют тип и цвет рамки окна
- ss_blackrect, ss_grayrect, ss_whiterect
- определяют цвет внутренности окна
- ss_leftnowordwrap, ss_left, ss_center, ss_right,
ss_simple
- определяют тип выравнивания текста
- ss_bitmap, ss_icon, ss_enhmetafile,
- определяют, что в окне будет выводиться
графическое изображение соответсвующего
формата. Как изменить изображение, см.
ниже
- ss_ownerdraw
- определяет, что окно будет отображаться
программой
- ss_notify
- определяет, что окно будет посылать
родительскому окну уведомляющие
сообщения
Управление окном статического текста
Для изменения текста в окне следует
использовать функцию SetWindowText
Для изменения картинки в окне static c
установленными флагами стиля ss_bitmap, ss_icon,
ss_enhmetafile следует использовать сообщения:
stm_setImage и stm_getImage. Поля wParam и lParam
которых должны иметь следующие значения:
В stm_setImage
- wParam
- флаг типа изображения:
- image_bitmap
-
- image_cursor
-
- image_enhmetafile
-
- image_icon
-
- lParam
- описатель изоражения
Кроме стандартных
вышеперечисленных классов, существует
также класс полос прокрутки (scrollbars), но о нем
я не рассказывать не буду — сами
разберетесь.
Наверх