95 в двух томах Том I



Pdf просмотр
страница35/41
Дата27.11.2016
Размер4.32 Mb.
Просмотров7673
Скачиваний0
ТипРеферат
1   ...   31   32   33   34   35   36   37   38   ...   41
Рис. 12.3 Префиксы флагов стилей элементов управления общего пользования

417
Посылка сообщений элементам управления общего пользования
После создания окна элемента управления общего пользования для управления его действиями ему посылаются сообщения. Как можно предположить, для этого требуется вызов функции SendMessage с ее традиционными четырьмя параметрами: описатель окна, идентификатор сообщения, значение wParam, значение lParam. Так же как существуют специфические флаги стилей элементов управления общего пользования, так и существуют специфические сообщения.
Альтернативой вызовам функции SendMessage является использование набора макросов языка C, определенных в файле COMMCTRL.H, которые получают специфичный для сообщения набор параметров, осуществляют необходимые преобразования (например, упаковка двух величин типа shorts в одну величину типа lParam), а затем вызывают функцию SendMessage. Возвращаемое значение с целью минимизации числа сообщений компилятора также преобразуется к нужному типу, поскольку значение типа LRESULT, возвращаемое функцией SendMessage, не совпадает с ожидаемым типом возвращаемого значения.
В качестве примера того, как удобны эти макросы, посылающие сообщения элементам управления, рассмотрим сообщение TVM_INSERTITEM для добавления элемента в дерево просмотра. Это сообщение добавляет простой элемент в дерево просмотра. Ниже приведено выражение, использующее вызов функции SendMessage: hItem =(HTREEITEM)SendMessage( hwndTV, TVM_INSERTITEM, 0,(LPARAM)(LPTV_INSERTSTRUCT)&tvis );
Ниже показано, как послать то же самое сообщение, используя макрос TreeView_InsertItem: hItem = TreeView_InsertItem(hwndTV, &tvis);
Макрос проще для чтения (имя макроса содержит имя класса окна и имя сообщения), он требует только половину параметров, а дает тот же результат, поскольку он расширяется в вызов функции SendMessage с соответствующим преобразованием параметров. Перейдя однажды на работу с макросами, обратно вернуться будет уже трудно.
(Если вам интересно использование набора аналогичных макросов для предопределенных элементов управления, то вы можете найти их определения в файле WINDOWSX.H. Макросы не документированы ни в одном файле помощи. Они достаточно хорошо сами себя объясняют и просты в использовании. Так же как и применение макросов для элементов управления общего пользования, так и использование макросов из файла WINDOWSX.H может сделать программу проще для написания и чтения.)
Несмотря на то что такие макросы очень полезны, файлы Win32, к сожалению, включают определения лишь для половины элементов управления общего пользования. Файл COMMCTRL.H содержит лишь макроопределения для следующих классов: анимационное изображение, заголовок списка просмотра, список просмотра, набор страниц свойств (в файле PRSHT.H), дерево просмотра и набор закладок для выбора.
Поскольку эти макросы так удобны, на прилагаемом к книге компакт-диске вы найдете набор макросов для других элементов управления общего пользования. Там находятся макросы для следующих классов: горячая клавиша, индикатор процесса, усовершенствованный редактор, строка состояния, панель инструментов, окно подсказки, окно с движком для выбора значения из диапазона и полоса прокрутки, связанная с окном редактирования для изменения значения. Эти макросы находятся в файле \PETZOLD\CHAP12\COMCTHLP.H.
Рис. 12.4 Программа CTLMACRO обеспечивает быстрый доступ к макросам сообщений элементов управления общего пользования
На прилагаемом компакт-диске находится также программа CTLMACRO, которая каталогизирует все макросы элементов управления общего пользования. Как показано на рис. 12.4, программа CTLMACRO элементизирует все макросы элементов управления общего пользования иерархически, и они доступны посредством простого дерева просмотра. Когда вы найдете сообщение, которое вам необходимо, нажмите кнопку Copy для копирования

418 макроса в папку обмена Clipboard. Оттуда его легко вставить в программу, используя редактор, в котором разрабатывается программа.
Уведомляющие сообщения от элементов управления общего пользования
Как и предопределенные элементы управления, элементы управления общего пользования посылают своему родительскому окну уведомляющие сообщения. Уведомляющие сообщения информируют родительское окно о том, что что-то произошло с окном: пользователь нажал кнопку мыши на элементе управления, напечатал текст, переместил фокус ввода на элемент управления или переместил его с элемента управления.
В отличие от предопределенных элементов управления, которые посылают уведомления как сообщения
WM_COMMAND, элементы управления общего пользования посылают уведомления как сообщения
WM_NOTIFY. Таким образом, если добавить элемент управления общего пользования к существующему коду, то смешивания обработки уведомляющих сообщений от предопределенных элементов управления и элементов управления общего пользования в программе не произойдет. Сообщения WM_NOTIFY также предотвращают путаницу с уведомляющими сообщениями от меню, которые тоже выражаются в виде сообщений
WM_COMMAND.
Однако, не все уведомления элементов управления общего пользования приходят как сообщения WM_NOTIFY. В частности, панель инструментов, использующая сообщения WM_NOTIFY для большинства уведомлений, посылает сообщения WM_COMMAND, когда нажимается кнопка. Поскольку панель инструментов используется для поддержки выбора из меню, тот же код обработки сообщений WM_COMMAND, что для поддержки меню и быстрых клавиш, будет обрабатывать сообщения от панели инструментов. Еще одно исключение — полоса прокрутки, связанная с окном редактирования для изменения значения, которая также посылает сообщения
WM_VSCROLL или WM_HSCROLL при нажатии на стрелки.
Хотя каждый элемент управления общего пользования имеет свой собственный набор кодов уведомления, существует общий набор уведомлений. Этот набор приведен в следующей таблице:
Код уведомления
Описание
NM_CLICK
Пользователь сделал щелчок левой кнопкой мыши
NM_DBLCLK
Пользователь сделал двойной щелчок левой кнопкой мыши
NM_KILLFOCUS
Элемент управления потерял фокус ввода
NM_OUTOFMEMORY
Ошибка нехватки памяти
NM_RCLICK
Пользователь сделал щелчок правой кнопкой мыши
NM_RDBLCLK
Пользователь сделал двойной щелчок правой кнопкой мыши
NM_RETURN
Пользователь нажал клавишу
NM_SETFOCUS
Элемент управления получил фокус ввода
Не все элементы управления общего пользования обязательно посылают каждое из этих уведомляющих сообщений. Например, набор закладок для выбора не посылает уведомлений, связанных с изменением фокуса ввода (NM_KILLFOCUS и NM_SETFOCUS). При работе с каждым элементом управления общего пользования следует разобраться с тем, какие уведомляющие сообщения он посылает.
Один из методов разобраться в этом лабиринте уведомляющих сообщений, посылаемых элементами управления общего пользования, состоит в обработке каждого сообщения WM_NOTIFY и выводе соответствующего кода уведомления в окно отладчика. Эта задача упрощается за счет того, что коды уведомлений для каждого элемента управления общего пользования определены в уникальном диапазоне. Поэтому, простая таблица поиска может быть использована для интерпретации кода уведомления. Не имеет значения, с каким элементом управления общего пользования идет работа.
Можно обрабатывать сообщение WM_NOTIFY так, как показано ниже, для вывода информации в окно отладчика с помощью функции OutputDebugString. Для просмотра результатов работы этой функции в Win32 API вам следует запустить программу в отладчике: case WM_NOTIFY:
{ int idCtrl =(int) wParam;
LPNMHDR pnmh =(LPNMHDR) lParam;
#ifdef
_DEBUG
// вывод уведомляющих сообщений в окно отладчика
LPSTR pText; if( QueryNotifyText(pnmh->code, &pText) )
{
OutputDebugString(pText);
OutputDebugString("\r\n");
}
#endif

419
[другие строки программы]

return 0;
}
Каждый пример программы в этой главе обрабатывает сообщение WM_NOTIFY так, как показано выше.
Описания, которые необходимы для вызова функции QueryNotifyText, приведены ниже: typedef struct tagCONTROLNOTIFICATIONS
{
UINT nCode;
LPSTR pName;
} CONTROLNOTIFICATIONS;
BOOL QueryNotifyText(UINT nNotifyCode, LPSTR *pName);
Функция и определения данных для QueryNotifyText приведены ниже:
#include
#include
#include
#include
#include "notify.h"
CONTROLNOTIFICATIONS cnLookupTable[] =
{
NM_OUTOFMEMORY,
"NM_OUTOFMEMORY",
NM_CLICK,
"NM_CLICK",
NM_DBLCLK,
"NM_DBLCLK",
NM_RETURN,
"NM_RETURN",
NM_RCLICK,
"NM_RCLICK",
NM_RDBLCLK,
"NM_RDBLCLK",
NM_SETFOCUS,
"NM_SETFOCUS",
NM_KILLFOCUS,
"NM_KILLFOCUS",
LVN_ITEMCHANGING,
"LVN_ITEMCHANGING",
LVN_ITEMCHANGED,
"LVN_ITEMCHANGED",
LVN_INSERTITEM,
"LVN_INSERTITEM",
LVN_DELETEITEM,
"LVN_DELETEITEM",
LVN_DELETEALLITEMS,
"LVN_DELETEALLITEMS",
LVN_BEGINLABELEDITA,
"LVN_BEGINLABELEDITA",
LVN_BEGINLABELEDITW,
"LVN_BEGINLABELEDITW",
LVN_ENDLABELEDITA,
"LVN_ENDLABELEDITA",
LVN_ENDLABELEDITW,
"LVN_ENDLABELEDITW",
LVN_COLUMNCLICK,
"LVN_COLUMNCLICK",
LVN_BEGINDRAG,
"LVN_BEGINDRAG",
LVN_BEGINRDRAG,
"LVN_BEGINRDRAG",
LVN_GETDISPINFOA,
"LVN_GETDISPINFOA",
LVN_GETDISPINFOW,
"LVN_GETDISPINFOW",
LVN_SETDISPINFOA,
"LVN_SETDISPINFOA",
LVN_SETDISPINFOW,
"LVN_SETDISPINFOW",
LVN_KEYDOWN,
"LVN_KEYDOWN",
HDN_ITEMCHANGINGA,
"HDN_ITEMCHANGINGA",
HDN_ITEMCHANGINGW,
"HDN_ITEMCHANGINGW",
HDN_ITEMCHANGEDA,
"HDN_ITEMCHANGEDA",
HDN_ITEMCHANGEDW,
"HDN_ITEMCHANGEDW",
HDN_ITEMCLICKA,
"HDN_ITEMCLICKA",
HDN_ITEMCLICKW,
"HDN_ITEMCLICKW",
HDN_ITEMDBLCLICKA,
"HDN_ITEMDBLCLICKA",
HDN_ITEMDBLCLICKW,
"HDN_ITEMDBLCLICKW",
HDN_DIVIDERDBLCLICKA,
"HDN_DIVIDERDBLCLICKA",
HDN_DIVIDERDBLCLICKW,
"HDN_DIVIDERDBLCLICKW",
HDN_BEGINTRACKA,
"HDN_BEGINTRACKA",
HDN_BEGINTRACKW,
"HDN_BEGINTRACKW",
HDN_ENDTRACKA,
"HDN_ENDTRACKA",
HDN_ENDTRACKW,
"HDN_ENDTRACKW",
HDN_TRACKA,
"HDN_TRACKA",
HDN_TRACKW,
"HDN_TRACKW",

420
TVN_SELCHANGINGA,
"TVN_SELCHANGINGA",
TVN_SELCHANGINGW,
"TVN_SELCHANGINGW",
TVN_SELCHANGEDA,
"TVN_SELCHANGEDA",
TVN_SELCHANGEDW,
"TVN_SELCHANGEDW",
TVN_GETDISPINFOA,
"TVN_GETDISPINFOA",
TVN_GETDISPINFOW,
"TVN_GETDISPINFOW",
TVN_SETDISPINFOA,
"TVN_SETDISPINFOA",
TVN_SETDISPINFOW,
"TVN_SETDISPINFOW",
TVN_ITEMEXPANDINGA,
"TVN_ITEMEXPANDINGA",
TVN_ITEMEXPANDINGW,
"TVN_ITEMEXPANDINGW",
TVN_ITEMEXPANDEDA,
"TVN_ITEMEXPANDEDA",
TVN_ITEMEXPANDEDW,
"TVN_ITEMEXPANDEDW",
TVN_BEGINDRAGA,
"TVN_BEGINDRAGA",
TVN_BEGINDRAGW,
"TVN_BEGINDRAGW",
TVN_BEGINRDRAGA,
"TVN_BEGINRDRAGA",
TVN_BEGINRDRAGW,
"TVN_BEGINRDRAGW",
TVN_DELETEITEMA,
"TVN_DELETEITEMA",
TVN_DELETEITEMW,
"TVN_DELETEITEMW",
TVN_BEGINLABELEDITA,
"TVN_BEGINLABELEDITA",
TVN_BEGINLABELEDITW,
"TVN_BEGINLABELEDITW",
TVN_ENDLABELEDITA,
"TVN_ENDLABELEDITA",
TVN_ENDLABELEDITW,
"TVN_ENDLABELEDITW",
TVN_KEYDOWN,
"TVN_KEYDOWN",
TTN_NEEDTEXTA,
"TTN_NEEDTEXTA",
TTN_NEEDTEXTW,
"TTN_NEEDTEXTW",
TTN_SHOW,
"TTN_SHOW",
TTN_POP,
"TTN_POP",
TCN_KEYDOWN,
"TCN_KEYDOWN",
TCN_SELCHANGE,
"TCN_SELCHANGE",
TCN_SELCHANGING,
"TCN_SELCHANGING",
TBN_GETBUTTONINFOA,
"TBN_GETBUTTONINFOA",
TBN_GETBUTTONINFOW,
"TBN_GETBUTTONINFOW",
TBN_BEGINDRAG,
"TBN_BEGINDRAG",
TBN_ENDDRAG,
"TBN_ENDDRAG",
TBN_BEGINADJUST,
"TBN_BEGINADJUST",
TBN_ENDADJUST,
"TBN_ENDADJUST",
TBN_RESET,
"TBN_RESET",
TBN_QUERYINSERT,
"TBN_QUERYINSERT",
TBN_QUERYDELETE,
"TBN_QUERYDELETE",
TBN_TOOLBARCHANGE,
"TBN_TOOLBARCHANGE",
TBN_CUSTHELP,
"TBN_CUSTHELP",
UDN_DELTAPOS,
"UDN_DELTAPOS",
PSN_SETACTIVE,
"PSN_SETACTIVE",
PSN_KILLACTIVE,
"PSN_KILLACTIVE",
PSN_APPLY,
"PSN_APPLY",
PSN_RESET,
"PSN_RESET",
PSN_HELP,
"PSN_HELP",
PSN_WIZBACK,
"PSN_WIZBACK",
PSN_WIZNEXT,
"PSN_WIZNEXT",
PSN_WIZFINISH,
"PSN_WIZFINISH",
PSN_QUERYCANCEL,
"PSN_QUERYCANCEL"
}; int NOTIFY_COUNT = sizeof(cnLookupTable) / sizeof(CONTROLNOTIFICATIONS);
//-------------------------------------------------------------------
// QueryNotifyText: Convert notification codes into text
(
Преобразование уведомляющего кода в
текст
)
//-------------------------------------------------------------------
BOOL QueryNotifyText(UINT nNotifyCode, LPSTR *pName)
{
BOOL bFound = FALSE; int iNotify;

421 for(iNotify = 0; iNotify < NOTIFY_COUNT; iNotify++)
{ if(cnLookupTable[iNotify].nCode == nNotifyCode)
{
*pName = cnLookupTable[iNotify].pName; return TRUE;
}
}
// Unknown notification code(
неизвестный уведомляющий код
)
*pName = "** Unknown **"; return FALSE;
}
Элементы управления главного окна
Три элемента управления общего пользования часто используются в главных окнах: панели инструментов, окна подсказки и строки состояния. На рис. 12.5 показаны примеры каждого из этих элементов управления, реализованных в программе GADGETS.
Рис. 12.5 Программа GADGETS, иллюстрирующая использование элементов управления общего пользования: панели инструментов, окна подсказки, строки состояния
Панели инструментов
Панель инструментов — это дочернее окно, обычно расположенное под меню программы, и состоящее из кнопок, соответствующих наиболее употребительным пунктам меню и опциям программы. Кнопки панели инструментов сами по себе не являются окнами, они являются графическими объектами, нарисованными с использованием битовых образов на поверхности окна панели инструментов.
Метками кнопок панели инструментов могут быть либо битовые образы, либо битовые образы с текстовыми метками. (Настоящая реализация не поддерживает кнопки только с текстовыми метками.) Панель инструментов устанавливает размеры всех кнопок одинаковыми, а размеры кнопок с текстовыми метками устанавливают такой величины, чтобы разместить наиболее длинную метку. Поэтому, следует выбирать короткие строки для текстовых меток, чтобы избежать слишком больших кнопок.
Кроме кнопок панель инструментов может содержать другие дочерние окна элементов управления, такие как окно комбинированного списка (combo box). Создаются встроенные элементы управления с помощью вызова функции
CreateWindow при задании окна панели инструментов как родительского. Как указано в книге Nancy Cuts
"Programming the Windows 95 User Interface", реальным препятствием для помещения элементов управления в панель инструментов является резервирование достаточно большого пиксельного пространства. В панели инструментов могут также содержаться разделители между кнопками и встроенными элементами управления. Так же как и случае меню, когда разделители определяются в описании меню специальным флагом SEPARATOR, так и в случае панели инструментов разделители кнопок строятся с использованием кнопок панели инструментов стиля

422
TBSTYLE_SEP. Дюжина или примерно столько разделителей требуется для резервирования места для окна комбинированного списка в панели инструментов.
Создание панели инструментов
Панель инструментов создается либо путем вызова функции CreateWindow и задания имени класса
TOOLBARCLASSNAME, либо путем вызова функции CreateToolbarEx, которая создает панель инструментов и инициализирует набор кнопок. Ниже приведен прототип функции CreateToolbarEx:
HWND CreateToolbarEx(
HWND hwnd, DWORD ws, UINT wID, int nBitmaps, HINSTANCE hBMInst,
UINT wBMID, LPCTBBUTTON lpButtons, int iNumButtons, int dxButton, int dyButton, int dxBitmap, int dyBitmap, UINT uStructSize
);
Первые три параметра используются в вызове функции CreateWindow, который осуществляет функция
CreateToolbarEx: hwnd — это описатель родительского окна, ws — флаги стиля окна, wID — идентификатор дочернего окна панели инструментов.
Следующие три параметра используются для загрузки ресурса битового образа, который содержит рисунки всех кнопок (множество изображений упакованы в строку в один битовый образ): nBitmaps — число изображений в битовом образе, hBMInst и wBMID идентифицируют ресурс битового образа для загрузки.
Параметр lpButtons — это указатель на массив элементов типа TBBUTTON, iNumButtons — задает число элементов в массиве. Каждый элемент TBBUTTON определяет битовый образ, идентификатор команды, тип кнопки, ее начальное состояние.
Размер каждой кнопки основывается на базе размеров изображения битового образа (dxBitmap, dyBitmap).
Минимальная ширина кнопки равна dxBitmap+7 пикселей, минимальная высота кнопки — dyBitmap+7 пикселей.
Существует возможность задать значения dxBitmap и dyBitmap для установки размеров кнопок больше минимальных.
Если необходимости в этом нет, то значения dxBitmap и dyBitmap устанавливаются равными нулю.
Вариант панели инструментов основывается на размере структуры TBBUTTON, который задается последним параметром uStructSize, и должен равняться sizeof (TBBUTTON).
При создании панель инструментов устанавливает свой размер и местоположение в "правильные" значения: высота устанавливается в соответствии с высотой кнопок, ширина устанавливается в соответствии с шириной рабочей области родительского окна. Панель инструментов размещается в верхней части родительского окна.
Заставить панель инструментов изменить эти установки можно только путем модификации стилей окна. Как это делать — описано в следующем разделе.
Стили окна панели инструментов
Основные свойства панели инструментов управляются с помощью установки флагов стиля окна. Разрешено совместное использование флагов основного стиля элементов управления общего пользования (CCS_) и флагов стиля, специфичных для панели инструментов (TBSTYLE_) (см. таблицу):
Категория
Флаг стиля
Описание
Представление CCS_NODIVIDER
Запрещает рисование разделительной линии над панелью инструментов
TBSTYLE_WRAPABLE
Поддерживает панели инструментов, состоящую из нескольких строк
Автоматическое размещение по оси y
CCS_TOP
Помещает панель инструментов в верхнюю часть родительского окна (по умолчанию), выравнивая ширину по родительскому окну и высоту по размерам кнопки.
CCS_BOTTOM
Помещает панель инструментов в нижнюю часть родительского окна, выравнивая ширину по рабочей зоне родительского окна и высоту по размерам кнопки.
CCS_NOMOVEY
Устанавливает начальное положение по оси x (у левой границы родительского окна), но не устанавливает начальное положение по оси y, выравнивая ширину по рабочей зоне родительского окна и высоту по размерам кнопки.

423
Категория
Флаг стиля
Описание
Запрещение автоматического перемещения и автоматического изменения размера
CCS_NOPARENTALIGN
Панель инструментов устанавливает свою высоту, но не положение и ширину. Для нормальной работы посылается сообщение для изменения размера после создания.
CCS_NORESIZE
Запрещает все автоматические перемещения и изменения размеров.Это запрещает следующие флаги стиля: CCS_TOP,
CCS_BOTTOM, CCS_NOMOVEY и
CCS_NOPARENTALIGN. Вы должны явно задать размеры и положение панели инструментов.
Изменение конфигурации панели инструментов
CCS_ADJUSTABLE
Поддерживает использование левой кнопки мыши при нажатой клавише для перемещения и двойной щелчок для вывода диалогового окна изменения конфигурации.
(Более детально об изменении конфигурации панели инструментов читайте соответствующий раздел этой главы.)
TBSTYLE_ALTDRAG
Изменяет панель инструментов, имеющую стиль CCS_ADJUSTABLE так, что для перемещения кнопок вместо левой кнопки мыши и клавиши используется клавиша и левая кнопка мыши.
Поддержка окон подсказки TBSTYLE_TOOLTIPS Строит элемент управления окно подсказки.
При создании панели инструментов устанавливается по умолчанию только стиль CCS_TOP, что приводит к расположению панели инструментов в верхней части родительского окна. После этого, родительское окно может сделать запрос панели инструментов для изменения ее размеров и местоположения посредством посылки сообщения TB_AUTOSIZE, что обычно и делает родительское окно при обработке сообщения WM_SIZE. За исключением посылки сообщения с запросом об изменении размера панель инструментов с флагом CCS_TOP или
CCS_BOTTOM достаточно самостоятельна и не требует другого обслуживания. Присутствие флагов стиля, которые запрещают свойства автоматического перемещения и автоматического изменения размеров панели инструментов, требует немного больших затрат для обслуживания панели инструментов при изменении размеров родительского окна.
Два флага стиля изменяют представление панели инструментов. Первый, CCS_NODIVIDER, удаляет разделительную линию, призванную отделить кнопки панели инструментов стиля CCS_TOP от меню приложения.
Для панелей инструментов, отображаемых в других местах (таких как вторая панель инструментов, выводимая под первой), вероятно, потребуется спрятать разделительную линию. Это справедливо и для окон, имеющих панель инструментов, но не имеющих меню — эта разделительная линия будет плохо смотреться. Другой флаг стиля, относящийся к изменению представления панели инструментов, TBSTYLE_WRAPABLE позволяет переносить на другую строку кнопки панели инструментов. Без этого флага, кнопки, которые слишком длинные чтобы поместиться в одну линию, делаются невидимыми и становятся недоступными для пользователя.
Три флага стиля управляют перемещением относительно оси y: CCS_TOP (по умолчанию), CCS_BOTTOM и
CCS_NOMOVEY. Эти флаги определяют, как будет расположена панель инструментов в ее родительском окне как при создании, так и при получении сообщения TB_AUTOSIZE. Флаг CCS_NOMOVEY делает возможным только приведение ширины (для полного использования рабочей области родительского окна), высоты и месторасположения относительно оси x, и оставляет на ваше усмотрение перемещение панели инструментов вдоль оси y, как при указании значений по оси y в вызове функции CreateWindow, так и при вызове функций типа
MoveWindow после того, как панель инструментов будет создана. Панель инструментов с этим флагом была бы удобна в качестве второй панели инструментов, расположенной непосредственно под панелью инструментов с флагом CCS_TOP.
Два других флага стиля ограничивают возможности автоматического перемещения и автоматического изменения размеров панели инструментов. При использовании флага CCS_NOPARENTALIGN высота панели инструментов устанавливается в соответствии с высотой кнопок, но необходимо установить местоположение и ширину. Флаг
CCS_NORESIZE полностью запрещает любое перемещение и изменение размеров панели инструментов. Этот флаг был бы полезным при использовании панели инструментов как элемента управления в диалоговом окне, когда она должна занимать указанную область без самостоятельного изменения размеров. Этот флаг был бы также полезен при установке двух и более панелей инструментов друг за другом в одной строке.
Флаг стиля CCS_ADJUSTABLE строит панель инструментов, которую пользователь может изменять "на лету". Кнопки могут быть перемещены в рамках панели инструментов или перетащены за панель инструментов с помощью клавиши
и левой кнопки мыши. Двойной щелчок левой кнопкой мыши приводит к вызову диалогового окна изменения

424 конфигурации панели инструментов (Customize Toolbar dialog box) для добавления, удаления или перемещения кнопок.
(Это диалоговое окно появляется и при получении панелью инструментов сообщения TB_CUSTOMIZE.) Изменение конфигурации требует от родительского окна реагирования на некоторые уведомляющие сообщения —
TBN_QUERYINSERT и TBN_QUERYDELETE, посылаемые среди других панелью инструментов, которые запрашивают разрешение на вставку или удаление кнопок. Для панели инструментов с изменяемой конфигурацией флаг стиля TBSTYLE_ALTDRAG изменяет пользовательский интерфейс перемещения кнопок с сочетания клавиши и левой кнопки мыши на сочетание клавиши и левой кнопки мыши для тех случаев, когда первое сочетание используется в других целях.
Флаг стиля TBSTYLE_TOOLTIPS требует от панели инструментов создания элемента управления подсказка, который выводит маленькое окно с текстом для каждой кнопки. Родительское окно панели инструментов получает уведомление TTN_NEEDTEXT (в форме сообщения WM_NOTIFY), когда окну подсказки необходим текст для конкретной кнопки.



Поделитесь с Вашими друзьями:
1   ...   31   32   33   34   35   36   37   38   ...   41


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал