// mainfrm.h内
class CMainFrame : public CFrameWindowImpl<CMainFrame>,
public CUpdateUI<CMainFrame>, public CMessageFilter, public CIdleHandler
{
public:
DECLARE_FRAME_WND_CLASS(NULL, IDR_MAINFRAME)
enum { IDC_COMBO_REBAR = 1001 };
CComboBox m_combo_rebar;
virtual BOOL PreTranslateMessage(MSG* pMsg){
return CFrameWindowImpl<CMainFrame>::PreTranslateMessage(pMsg);
}
virtual BOOL OnIdle(){
UIUpdateToolBar();
return FALSE;
}
BEGIN_UPDATE_UI_MAP(CMainFrame)
UPDATE_ELEMENT(ID_MENUITEM_TOOLBAR, UPDUI_MENUPOPUP)
END_UPDATE_UI_MAP()
BEGIN_MSG_MAP_EX(CMainFrame)
MSG_WM_CREATE(OnCreate)
COMMAND_ID_HANDLER_EX(ID_MENUITEM_TOOLBAR, OnMenuToolbar)
COMMAND_ID_HANDLER_EX(ID_APP_EXIT, OnMenuExit)
CHAIN_MSG_MAP(CUpdateUI<CMainFrame>)
CHAIN_MSG_MAP(CFrameWindowImpl<CMainFrame>)
END_MSG_MAP()
LRESULT OnCreate(LPCREATESTRUCT lpcs){
// リバーを作成
CreateSimpleReBar();
// ツールバーを作成してバンドに追加
HWND hToolBar = CreateSimpleToolBarCtrl(m_hWnd,
IDR_MAINFRAME, FALSE, ATL_SIMPLE_TOOLBAR_PANE_STYLE);
AddSimpleReBarBand(hToolBar);
UIAddToolBar(hToolBar);
UISetCheck(ID_MENUITEM_TOOLBAR, 1);
// コンボボックスを作成してバンドに追加
m_combo_rebar.Create(m_hWnd, CRect(0, 0, 100, 100), NULL,
WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWNLIST, 0, IDC_COMBO_REBAR);
m_combo_rebar.SetFont(AtlGetDefaultGuiFont());
m_combo_rebar.AddString(_T("アイテム1"));
m_combo_rebar.AddString(_T("アイテム2"));
AddSimpleReBarBand(m_combo_rebar);
// リバーのサイズを調整
SizeSimpleReBarBands();
// メッセージループにメッセージフィルタとアイドルハンドラを追加
CMessageLoop* pLoop = _Module.GetMessageLoop();
pLoop->AddMessageFilter(this);
pLoop->AddIdleHandler(this);
return 0;
}
void OnMenuToolbar(UINT uNotifyCode, int nID, HWND hWndCtl){
static BOOL bVisible = TRUE;
bVisible = !bVisible;
CReBarCtrl rebar = m_hWndToolBar;
int nBandIndex = rebar.IdToIndex(ATL_IDW_BAND_FIRST);
rebar.ShowBand(nBandIndex, bVisible);
UISetCheck(ID_MENUITEM_TOOLBAR, bVisible);
UpdateLayout();
}
void OnMenuExit(UINT uNotifyCode, int nID, HWND hWndCtl){
PostMessage(WM_CLOSE);
}
};
|