// MainFrm.h
#pragma once
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_VIEW_TOOLBAR, UPDUI_MENUPOPUP)
END_UPDATE_UI_MAP()
BEGIN_MSG_MAP(CMainFrame)
MSG_WM_CREATE(OnCreate)
MSG_WM_DESTROY(OnDestroy)
COMMAND_ID_HANDLER_EX(ID_VIEW_TOOLBAR, OnViewToolbar)
COMMAND_ID_HANDLER_EX(ID_APP_EXIT, OnFileExit)
CHAIN_MSG_MAP(CUpdateUI<CMainFrame>)
CHAIN_MSG_MAP(CFrameWindowImpl<CMainFrame>)
END_MSG_MAP()
int OnCreate(LPCREATESTRUCT lpCreateStruct){
// ツールバーを作成
HWND hWndToolBar = CreateSimpleToolBarCtrl(m_hWnd,
IDR_MAINFRAME, FALSE, ATL_SIMPLE_TOOLBAR_PANE_STYLE);
UIAddToolBar(hWndToolBar);
UISetCheck(ID_VIEW_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"));
// リバーを作成し、ツールバーとコンボボックスをバンドに追加
CreateSimpleReBar();
AddSimpleReBarBand(hWndToolBar);
AddSimpleReBarBand(m_combo_rebar);
// リバーのサイズを調整
SizeSimpleReBarBands();
// メッセージループにメッセージフィルタとアイドルハンドラを追加
CMessageLoop* pLoop = _Module.GetMessageLoop();
pLoop->AddMessageFilter(this);
pLoop->AddIdleHandler(this);
return 0;
}
void OnDestroy(){
// メッセージループからメッセージフィルタとアイドルハンドラを削除
CMessageLoop* pLoop = _Module.GetMessageLoop();
pLoop->RemoveMessageFilter(this);
pLoop->RemoveIdleHandler(this);
SetMsgHandled(false);
}
void OnViewToolbar(UINT uNotifyCode, int nID, CWindow wndCtl){
static BOOL bVisible = TRUE;
bVisible = !bVisible;
CReBarCtrl rebar = m_hWndToolBar;
int nBandIndex = rebar.IdToIndex(ATL_IDW_BAND_FIRST);
rebar.ShowBand(nBandIndex, bVisible);
UISetCheck(ID_VIEW_TOOLBAR, bVisible);
UpdateLayout();
}
void OnFileExit(UINT uNotifyCode, int nID, CWindow wndCtl){
PostMessage(WM_CLOSE);
}
};
|