// SampleProjectFrame.h
#pragma once
class CSampleProjectFrame :
public CFrameWindowImpl<CSampleProjectFrame>,
public CUpdateUI<CSampleProjectFrame>,
public CAppWindow<CSampleProjectFrame>,
public CMessageFilter, public CIdleHandler
{
public:
DECLARE_APP_FRAME_CLASS(NULL, IDR_MAINFRAME, L"Software\\WTL")
CToolBarCtrl m_toolbar;
virtual BOOL PreTranslateMessage(MSG* pMsg){
return CFrameWindowImpl<CSampleProjectFrame>::PreTranslateMessage(pMsg);
}
virtual BOOL OnIdle(){
return FALSE;
}
BEGIN_UPDATE_UI_MAP(CSampleProjectFrame)
END_UPDATE_UI_MAP()
BEGIN_MSG_MAP(CSampleProjectFrame)
MSG_WM_CREATE(OnCreate)
MSG_WM_DESTROY(OnDestroy)
NOTIFY_CODE_HANDLER_EX(TBN_DROPDOWN, OnToolbarDropdown)
COMMAND_ID_HANDLER_EX(ID_HELLO_WORLD, OnHelloWorld)
COMMAND_ID_HANDLER_EX(ID_HELLO_ATL, OnHelloATL)
COMMAND_ID_HANDLER_EX(ID_HELLO_WTL, OnHelloWTL)
COMMAND_ID_HANDLER_EX(ID_APP_EXIT, OnAppExit)
CHAIN_MSG_MAP(CAppWindow<CSampleProjectFrame>)
CHAIN_MSG_MAP(CUpdateUI<CSampleProjectFrame>)
CHAIN_MSG_MAP(CFrameWindowImpl<CSampleProjectFrame>)
END_MSG_MAP()
int OnCreate(LPCREATESTRUCT lpCreateStruct){
// メニューバー作成
CreateSimpleCEMenuBar(IDR_MAINFRAME, SHCMBF_HMENU);
// ツールバー作成
m_toolbar = CreateSimpleCEToolBar();
// ツールバー上のボタンのスタイルを変更
TBBUTTONINFO bi = { sizeof(bi), TBIF_STYLE };
m_toolbar.GetButtonInfo(ID_HELLO_WORLD, &bi);
bi.fsStyle |= TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE;
m_toolbar.SetButtonInfo(ID_HELLO_WORLD, &bi);
// メッセージループにメッセージフィルタとアイドルハンドラを追加
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);
}
LRESULT OnToolbarDropdown(LPNMHDR pnmh){
LPNMTOOLBAR pnmtb = (LPNMTOOLBAR)pnmh;
if(pnmtb->iItem == ID_HELLO_WORLD){
// ドロップダウンメニューを表示する位置を取得
CRect rcButton;
m_toolbar.GetRect(ID_HELLO_WORLD, rcButton);
m_toolbar.ClientToScreen(rcButton);
TPMPARAMS tpm = {sizeof(tpm)};
tpm.rcExclude = rcButton;
// ドロップダウンメニュー表示
CMenu menuDropdown;
menuDropdown.LoadMenu(IDR_MENU_DROPDOWN);
menuDropdown.GetSubMenu(0).TrackPopupMenuEx(
TPM_RIGHTALIGN | TPM_BOTTOMALIGN,
rcButton.right, rcButton.top, m_hWnd, &tpm);
}
return FALSE;
}
void OnHelloWorld(UINT uNotifyCode, int nID, CWindow wndCtl){
MessageBox(_T("Hello World"));
}
void OnHelloATL(UINT uNotifyCode, int nID, CWindow wndCtl){
MessageBox(_T("Hello ATL"));
}
void OnHelloWTL(UINT uNotifyCode, int nID, CWindow wndCtl){
MessageBox(_T("Hello WTL"));
}
void OnAppExit(UINT uNotifyCode, int nID, CWindow wndCtl){
PostMessage(WM_CLOSE);
}
};
|