The combo boxes in the StyleEditor sample are not combo box common controls. They are built in items of Prof-UIS customization subsystem. The StyleEditorsample initializes common description for the font combo box in the CMainFrame::OnCreate()
method:
pCmdItem = g_CmdManager->CmdGetPtr( pApp->m_pszProfileName, ID_SE_FONT_LIST );
pCmdItem->StateSetCombo();
pCmdItem->StateSetResizable();
pCmdItem->m_nTextFieldWidth = pCmdItem->m_nDropDownWidth = 150;
Then the customization subsystem initializes combo fields for the
ID_SE_FONT_LIST
command in toolbars and menus instead of default toolbar command buttons and menu command items. If you are using customizable toolbars and menus, then you can use the approach implemented in the Microsoft Office and Visual Studio applications: You can create one additional toolbar and use it’s buttons as context menus. This toolbar should be visible in the customize mode to let user customize context menus. This toolbar should be invisible in normal mode. So, you should set its
CExtControlBar::m_bAppearInDockSiteControlBarPopupMenu
property to
false
. This will hide menu command of this toolbar in all the built-in Prof-UIS menus. Then you should create it as initially invisible. You should also implement the
CExtCustomizeSite::OnCustomizeModeEnter()
and
CExtCustomizeSite::OnCustomizeModeLeave()
virtual methods which should make the context menus toolbar force visible when the customize mode begins and hide it on end. If you need to show context menu, then you should get the command tree node of appropriate toolbar button, construct the newly allocated
CExtPopupMenuWnd
from it using the
CExtPopupMenuWnd::UpdateFromCmdTree()
method.
If you are not using the customization subsystem, then you will need to initialize the combo box in popup menu manually and implement callbacks for it. You should insert normal command item first and get the
CExtPopupMenuWnd::MENUITEMDATA & menu
item description for it using the
CExtPopupMenuWnd::ItemGetInfo()
method. The
CExtPopupMenuWnd::MENUITEMDATA::SetInplaceEdit()
method converts the command button into text field button. But if you will insert the
CExtPopupListBoxMenuWnd
popup list box sub menu instead of the command menu first using the
CExtPopupMenuWnd::ItemInsertSpecPopup()
method, then the converted to edit popup menu sub item will look and work like combo box. The
CExtPopupListBoxMenuWnd
class also requires its special callback functions for implementing popup list box functionality.
The approach based on customizable toolbars and menus is better because you don’t need to implement any callbacks. You need to override only the
CExtCustomizeSite::OnTextField***()
and
CExtCustomizeSite::OnPopupListBox***()
required virtual methods instead.