// mainfrm.h内
class CMainFrame : public CFrameWindowImpl<CMainFrame>,
public CUpdateUI<CMainFrame>, public CMessageFilter, public CIdleHandler
{
public:
DECLARE_FRAME_WND_CLASS(NULL, IDR_MAINFRAME)
enum { IDC_PAGER_BAR = 1001 };
CPagerCtrl m_pager_bar;
CSize m_sizeToolbar; // ツールバーのサイズ
virtual BOOL PreTranslateMessage(MSG* pMsg){
return CFrameWindowImpl<CMainFrame>::PreTranslateMessage(pMsg);
}
virtual BOOL OnIdle(){
UIUpdateToolBar();
return FALSE;
}
BEGIN_UPDATE_UI_MAP(CMainFrame)
// エントリなし
END_UPDATE_UI_MAP()
BEGIN_MSG_MAP_EX(CMainFrame)
MSG_WM_CREATE(OnCreate)
NOTIFY_HANDLER_EX(IDC_PAGER_BAR, PGN_CALCSIZE, OnPagerCalcsize)
NOTIFY_HANDLER_EX(IDC_PAGER_BAR, PGN_SCROLL, OnPagerScroll)
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();
// ページャーコントロールを作成
m_pager_bar.Create(m_hWndToolBar, NULL, NULL,
WS_CHILD | WS_VISIBLE | PGS_HORZ, 0, IDC_PAGER_BAR);
// ツールバーを作成
HWND hWndToolBar = CreateSimpleToolBarCtrl(m_pager_bar.m_hWnd,
IDR_MAINFRAME, FALSE, ATL_SIMPLE_TOOLBAR_PANE_STYLE);
UIAddToolBar(hWndToolBar);
// ツールバーのサイズを取得
::SendMessage(hWndToolBar, TB_GETMAXSIZE, 0, (LPARAM)&m_sizeToolbar);
m_pager_bar.MoveWindow(0, 0, m_sizeToolbar.cx, m_sizeToolbar.cy);
m_pager_bar.SetChild(hWndToolBar);
m_pager_bar.SetBkColor(RGB(240, 240, 255));
AddSimpleReBarBand(m_pager_bar.m_hWnd, _T("ページャー付きツールバー"));
// ステータスバーを作成
CreateSimpleStatusBar();
// メッセージループにメッセージフィルタとアイドルハンドラを追加
CMessageLoop* pLoop = _Module.GetMessageLoop();
pLoop->AddMessageFilter(this);
pLoop->AddIdleHandler(this);
return 0;
}
LRESULT OnPagerCalcsize(LPNMHDR pnmh){
LPNMPGCALCSIZE pCalcSize = (LPNMPGCALCSIZE)pnmh;
switch(pCalcSize->dwFlag){
case PGF_CALCWIDTH:
pCalcSize->iWidth = m_sizeToolbar.cx;
break;
}
return 0;
}
LRESULT OnPagerScroll(LPNMHDR pnmh){
LPNMPGSCROLL pScroll = (LPNMPGSCROLL)pnmh;
switch(pScroll->iDir){
case PGF_SCROLLLEFT:
case PGF_SCROLLRIGHT:
case PGF_SCROLLUP:
case PGF_SCROLLDOWN:
pScroll->iScroll = 10;
break;
}
return 0;
}
void OnMenuExit(UINT uNotifyCode, int nID, HWND hWndCtl){
PostMessage(WM_CLOSE);
}
};
|