Глава 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

Наверх
           Подробнее о каждом классе

Кнопки (button)

Пример создания кнопки шириной 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
Наверх

Поля ввода текста (edit)

Пример создания поля ввода шириной 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
устанавливает шрифт поля ввода
Наверх

Списки (listbox)

 Пример создания списка:
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 констант (список см. выше)
Наверх

Комбинированные списки (combobox)

 Параметр 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
 
Наверх

Статические окна (static)

Статические окна служат для отображения текстовой информации, подобно компоненту 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), но о нем я не рассказывать не буду — сами разберетесь.

Наверх

Назад|Содержание|Вперед
Хостинг от uCoz