プログラミングメモ →目次

ツールバーにコンボボックスを追加(VC++)

ツールバーにコントロールを追加します。例として、コンボボックスを追加します。

1.事前に、ツールバーに追加しようとする場所に、SEPARATOR(スペース)を追加しておきます。例えば、下記のように3番目にSEPARATOR(スペース)を追加しておきます。

IDR_MAINFRAME TOOLBAR  16, 15
BEGIN
    BUTTON      ID_FILE_NEW
    BUTTON      ID_FILE_OPEN
    BUTTON      ID_FILE_SAVE
    SEPARATOR
    BUTTON      ID_EDIT_CUT
    BUTTON      ID_EDIT_COPY
    BUTTON      ID_EDIT_PASTE
    SEPARATOR
    BUTTON      ID_FILE_PRINT
    BUTTON      ID_APP_ABOUT
END

 

2.CMainFrameクラスにComboBoxのメンバーを追加します。

class CMainFrame : public CFrameWnd
{
	
protected: // create from serialization only
	CMainFrame();
	DECLARE_DYNCREATE(CMainFrame)

// Attributes
public:
	#define IDM_COMBO	1234
	CComboBox m_cmbboBox;
	...
	}; 

例:

3.ツールバー作成の処理に、下記のコードを追加します。

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // fail to create
	}

	CRect rectCombo;
	//3番目のITEMの幅を100ピクセルに設定
	m_wndToolBar.SetButtonInfo(3, IDM_COMBO, TBBS_SEPARATOR, 100);

	//3番目のITEMの領域で、Comboを作成
	m_wndToolBar.GetItemRect(3, &rectCombo);
	rectCombo.top = 1;         
	rectCombo.bottom = rectCombo.top + 100;
	if (!m_cmbboBox.Create(
				CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE,
				rectCombo, &m_wndToolBar, IDM_COMBO ) )
	{
		TRACE0("Failed to create combobox ...\n");
		return FALSE;
	}

	//サイズ調整の為、フォントをセット
	m_cmbboBox.SetFont(m_wndToolBar.GetFont());

	//COMBOにデータを設定。
	m_cmbboBox.AddString(_T("This"));
	m_cmbboBox.AddString(_T("is"));
	m_cmbboBox.AddString(_T("a"));
	m_cmbboBox.AddString(_T("test"));
	m_cmbboBox.AddString(_T("program"));
	m_cmbboBox.SetCurSel(0);


	if (!m_wndStatusBar.Create(this) ||
		!m_wndStatusBar.SetIndicators(indicators,
		  sizeof(indicators)/sizeof(UINT)))
	{
		TRACE0("Failed to create status bar\n");
		return -1;      // fail to create
	}

	// TODO: Delete these three lines if you don't want the toolbar to be dockable
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndToolBar);

	return 0;
}

 

4.補足。ツールバーの高さが大きい場合は、スペースの縦棒がコンボボックスの下端に見えてしまいます。それを解決するには、大きいサイズのStaticを先に追加して、Staticの手前に、Staticの子供として、ComboBoxを追加します。