15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Даём возможность пользователю изменять ToolBar


Автор: Deepak Khajuria

Описание

Класс CToolbarEx поддерживает основные типы изменения тулбара (как в IE) с элементами управления на нём. К тому же он может скрывать некоторые контролы, когда тулбар расположен вертикально (например, выпадающий список).

Для использования класса в своём проекте, проделайте следующие шаги:

1. Добавьте в проект ToolBarEx.cpp и ToolBarEx.h.

2. Включите ToolbarEx.h в MainFrame.h и замените CToolBar на CToolBarEx в CMainFrame

	#include "ToolBarEx.h"
	. . .

	// CToolBar      m_wndToolBar;
  	   CToolBarEx    m_wndToolBar;

3. В методе OnCreate класса CMainFrame, после того как создание Toolbar завершено(включая элементы управления), вызовите SetToolBarInfoForCustomization для установки дополнительных элементов в тулбаре. Эта функция будет вызвана после создания тулбара и элементов управления.

    CRect rt(0,0,200,120);

    //Вставляем элемент управления
    m_pComboBox =(CComboBox *) m_wndToolBar.InsertControl(RUNTIME_CLASS(CComboBox),
                                    _T(""),rt,ID_FIND,WS_VSCROLL|CBS_DROPDOWNLIST);

    m_pComboBox->AddString(_T("One"));
    m_pComboBox->AddString(_T("Two"));
    m_pComboBox->AddString(_T("Three"));

    //Добавляем выпадающий список
    m_wndToolBar.AddDropDownButton(ID_OP,IDR_OP,TRUE);

    //Разрешаем изменение тулбара
    m_wndToolBar.SetToolBarInfoForCustomization();

4. В заключение восстанавливаем последние записанные данные тулбара

	//Восстанавливаем состояние
	m_wndToolBar.RestoreState();

Так же можно добавить SaveState в OnClose класса CMainFrame.

Методы и переменные класса

	CWnd* InsertControl(CRuntimeClass* pClass,LPCTSTR lpszWindowName,
                                            CRect& rect,UINT nID,DWORD dwStyle );

Функция создаёт и добавляет контрол в Toolbar и возвращает указатель на добавленное окно. В параметре rect помещается только ширина и высота.

	CWnd* InsertControl(CWnd* pCtrl,CRect& rect,UINT nID);

Эта функция добавляет уже созданный элемент управления в Toolbar. В параметре rect помещается только ширина и высота.

	BOOL AddDropDownButton(UINT nIDButton,UINT nIDMenu,BOOL bArrow=TRUE);

Это функция добавления кнопки для выпадающего списка с меню, ассоциированного с ним. Если Вы хотите, чтобы стрелочка была видна, то установите bArrow в TRUE.

	void SetToolBarInfoForCustomization();

Эта функция устанавливает информацию для изменения Toolbar. Имена, используемые для кнопок в диалоговом окне изменения тулбара берутся из Tooltip кнопки. (Работать с ними желательно в редакторе ресурсов) Вызывайте эту функцию после создания Tolobar. После этого будут добавлены контролы и выпадающий список.

	void SaveState()

Сохраняет состояние тулбара в реестре.

	void RestoreState()

Восстанавливает состояние тулбара из реестра.

	BOOL m_bShowDropdownArrowWhenVertical;

Флаг, указывающий, будет ли видим выпадающий список при вертикальном расположении тулбара. По умолчанию значение FALSE

	BOOL m_bHideChildWndOnVertical;

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