Поделиться через


Обработка уведомлений о настройке

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

Эти функции настройки можно сделать доступными для пользователя, предоставив панели инструментов стиль CCS_ADJUSTABLE . Функции настройки позволяют пользователю перетаскивать кнопку в новую позицию или удалять кнопку, перетаскивая ее с панели инструментов. Кроме того, пользователь может дважды щелкнуть панель инструментов, чтобы отобразить диалоговое окно "Настройка панели инструментов ", что позволяет пользователю добавлять, удалять и изменять параметры панели инструментов. Приложение может отображать диалоговое окно с помощью функции "Настройка члена".

Элемент управления панели инструментов отправляет уведомления в родительское окно на каждом шаге процесса настройки. Если пользователь удерживает клавишу SHIFT вниз и начинает перетаскивать кнопку, панель инструментов автоматически обрабатывает операцию перетаскивания. Панель инструментов отправляет сообщение TBN_QUERYDELETE уведомления в родительское окно, чтобы определить, может ли кнопка быть удалена. Операция перетаскивания заканчивается, если родительское окно возвращает FALSE. В противном случае панель инструментов захватывает входные данные мыши и ожидает, пока пользователь отпустит кнопку мыши.

Когда пользователь освобождает кнопку мыши, элемент управления панели инструментов определяет расположение курсора мыши. Если курсор находится за пределами панели инструментов, кнопка удаляется. Если курсор находится на другой кнопке панели инструментов, панель инструментов отправляет сообщение TBN_QUERYINSERT уведомления в родительское окно, чтобы определить, может ли кнопка быть вставлена слева от указанной кнопки. Кнопка вставляется, если родительское окно возвращает TRUE; в противном случае кнопка не вставляется. Панель инструментов отправляет уведомление TBN_TOOLBARCHANGE, чтобы сообщить о завершении операции перетаскивания.

Если пользователь начинает операцию перетаскивания, не удерживая клавишу SHIFT, элемент управления панели инструментов отправляет сообщение TBN_BEGINDRAG уведомления в окно владельца. Приложение, реализующее собственный код перетаскивания кнопок, может использовать это сообщение в качестве сигнала для начала операции перетаскивания. Панель инструментов отправляет уведомление TBN_ENDDRAG, чтобы сообщить о завершении операции перетаскивания.

Элемент управления панелью инструментов отправляет уведомления, когда пользователь настраивает панель инструментов с помощью диалогового окна "Настройка панели инструментов ". Панель инструментов отправляет уведомление сообщения TBN_BEGINADJUST после двойного щелчка пользователем по панели инструментов, но перед созданием диалогового окна. Затем панель инструментов начинает отправлять ряд сообщений уведомлений TBN_QUERYINSERT , чтобы определить, позволяет ли панель инструментов вставлять кнопки. Когда родительское окно возвращает TRUE, панель инструментов перестает отправлять уведомления о сообщении TBN_QUERYINSERT. Если родительское окно не возвращает значение TRUE для любой кнопки, панель инструментов уничтожает диалоговое окно.

Затем элемент управления панели инструментов определяет, могут ли какие-либо кнопки быть удалены с панели инструментов, отправив одно сообщение TBN_QUERYDELETE уведомления для каждой кнопки на панели инструментов. Родительское окно возвращает ЗНАЧЕНИЕ TRUE , чтобы указать, что кнопка может быть удалена; в противном случае возвращает значение FALSE. Панель инструментов добавляет все кнопки панели инструментов в диалоговое окно, но делает неактивными те, которые не могут быть удалены.

Когда элементу управления панелью инструментов нужна информация о кнопке в диалоговом окне "Настройка панели инструментов", он отправляет сообщение уведомления TBN_GETBUTTONINFO, указывая индекс кнопки, для которой требуется информация, и адрес структуры TBNOTIFY. Родительское окно должно заполнить структуру соответствующими сведениями.

Диалоговое окно "Настройка панели инструментов" включает кнопки "Справка" и "Сброс". Когда пользователь нажимает кнопку справки, элемент управления панели инструментов отправляет уведомление TBN_CUSTHELP. Родительское окно должно отвечать, отображая справочную информацию. Диалоговое окно отправляет TBN_RESET уведомление, когда пользователь нажимает кнопку Сброса. Это сообщение сигнализирует о том, что панель инструментов будет повторно инициализировать диалоговое окно.

Эти сообщения являются всеми WM_NOTIFY сообщениями, и их можно обрабатывать в окне владельца, добавив записи карты сообщений следующей формы в карту сообщений вашего владельца:

ON_NOTIFY( wNotifyCode, idControl, memberFxn )
  • wNotifyCode

    Код идентификатора сообщения уведомления, например TBN_BEGINADJUST.

  • idControl

    Идентификатор элемента управления, отправляющего уведомление.

  • memberFxn

    Функция-член, вызываемая при получении этого уведомления.

Функция-член будет объявлена со следующим прототипом:

afx_msg void memberFxn( NMHDR * pNotifyStruct, LRESULT * result );

Если обработчик сообщения уведомления возвращает значение, он должен поместить его в LRESULT , на который указывает результат.

Для каждого сообщения pNotifyStruct указывает на структуру NMHDR или структуру TBNOTIFY . Эти структуры описаны ниже:

Структура NMHDR содержит следующие элементы:

typedef struct tagNMHDR {
    HWND hwndFrom;  // handle of control sending message
    UINT idFrom;// identifier of control sending message
    UINT code;  // notification code; see below
} NMHDR;
  • hwndFrom

    Дескриптор окна элемента управления, отправляющего уведомление. Чтобы преобразовать этот дескриптор в CWnd указатель, используйте CWnd::FromHandle.

  • idFrom

    Идентификатор элемента управления, отправляющего уведомление.

  • код

    Код уведомления. Этот элемент может быть значением, характерным для типа элемента управления, например TBN_BEGINADJUST или TTN_NEEDTEXT, или может быть одним из распространенных значений уведомлений, перечисленных ниже:

    • NM_CLICK Пользователь щелкнул левую кнопку мыши в элементе управления.

    • NM_DBLCLK Пользователь дважды щелкнул левую кнопку мыши в элементе управления.

    • NM_KILLFOCUS Элемент управления потерял фокус ввода.

    • NM_OUTOFMEMORY Элемент управления не мог завершить операцию, так как недостаточно доступной памяти.

    • NM_RCLICK Пользователь щелкнул правую кнопку мыши в элементе управления.

    • NM_RDBLCLK Пользователь дважды щелкнул правую кнопку мыши в элементе управления.

    • NM_RETURN Элемент управления имеет фокус ввода, и пользователь нажал клавишу Enter.

    • NM_SETFOCUS Элемент управления получил фокус ввода.

Структура TBNOTIFY содержит следующие элементы:

typedef struct {
    NMHDR hdr; // information common to all WM_NOTIFY messages
    int iItem; // index of button associated with notification
    TBBUTTON tbButton; // info about button associated withnotification
    int cchText;   // count of characters in button text
    LPSTR lpszText;// address of button text
} TBNOTIFY, FAR* LPTBNOTIFY;
  • hdr

    Сведения, общие для всех WM_NOTIFY сообщений.

  • iItem

    Индекс кнопки, связанной с уведомлением.

  • tbButton

    Структура TBBUTTON, содержащая сведения о кнопке панели инструментов, связанной с уведомлением.

  • cchText

    Количество символов в тексте кнопки.

  • lpszText

    Указатель на текст кнопки.

Уведомления, отправляемые панелью инструментов, приведены следующим образом:

  • TBN_BEGINADJUST

    Отправляется, когда пользователь начинает настраивать элемент управления панели инструментов. Указатель указывает на структуру NMHDR , содержащую сведения о уведомлении. Обработчику не нужно возвращать определенное значение.

  • TBN_BEGINDRAG

    Отправлено, когда пользователь начинает перетаскивать кнопку в элементе управления панелью инструментов. Указатель указывает на структуру TBNOTIFY . Элемент iItem содержит отсчитываемый от нуля индекс перетаскиваемой кнопки. Обработчику не нужно возвращать определенное значение.

  • TBN_CUSTHELP

    Отправляется, когда пользователь выбирает кнопку "Справка" в диалоговом окне "Настройка панели инструментов". Отсутствие возвращаемого значения. Указатель указывает на структуру NMHDR , содержащую сведения о сообщении уведомления. Обработчику не нужно возвращать определенное значение.

  • TBN_ENDADJUST

    Отправляется, когда пользователь перестает настраивать элемент управления панелью инструментов. Указатель указывает на структуру NMHDR , содержащую сведения о сообщении уведомления. Обработчику не нужно возвращать определенное значение.

  • TBN_ENDDRAG

    Отправляется, когда пользователь перестает перетаскивать кнопку в элементе управления панелью инструментов. Указатель указывает на структуру TBNOTIFY . Элемент iItem содержит отсчитываемый от нуля индекс перетаскиваемой кнопки. Обработчику не нужно возвращать определенное значение.

  • TBN_GETBUTTONINFO

    Отправляется, когда пользователь настраивает элемент управления панели инструментов. Панель инструментов использует это сообщение уведомления для получения сведений, необходимых диалоговому окне "Настройка панели инструментов". Указатель указывает на структуру TBNOTIFY . Элемент iItem задает отсчитываемый от нуля индекс кнопки. Элементы pszText и cchText указывают адрес и длину в символах текущего текста кнопки. Приложение должно заполнить структуру сведениями о кнопке. Возвращает TRUE, если сведения о кнопке были скопированы в структуру, или FALSE в противном случае.

  • TBN_QUERYDELETE

    Отправляется, когда пользователь настраивает панель инструментов, чтобы определить, может ли кнопка быть удалена из элемента управления панели инструментов. Указатель указывает на структуру TBNOTIFY . Элемент iItem содержит отсчитываемый от нуля индекс кнопки для удаления. Верните значение TRUE , чтобы разрешить удаление кнопки или FALSE , чтобы предотвратить удаление кнопки.

  • TBN_QUERYINSERT

    Отправлено, когда пользователь настраивает элемент управления панели инструментов, чтобы определить, может ли кнопка вставляться слева от указанной кнопки. Указатель указывает на структуру TBNOTIFY . Элемент iItem содержит отсчитываемый от нуля индекс кнопки для вставки. Верните значение TRUE , чтобы разрешить вставку кнопки перед заданной кнопкой или FALSE , чтобы предотвратить вставку кнопки.

  • TBN_RESET

    Отправляется, когда пользователь сбрасывает содержимое диалогового окна "Настройка панели инструментов". Указатель указывает на структуру NMHDR , содержащую сведения о сообщении уведомления. Обработчику не нужно возвращать определенное значение.

  • TBN_TOOLBARCHANGE

    Отправлено после того, как пользователь настроил элемент управления панели инструментов. Указатель указывает на структуру NMHDR , содержащую сведения о сообщении уведомления. Обработчику не нужно возвращать определенное значение.

См. также

Использование CToolBarCtrl
Элементы управления