#pragma once namespace ActiveBasic{ namespace IDE{ namespace WindowComponents{ class MdiWindow : public CMDIFrameWindowImpl , public CUpdateUI , public CMessageFilter , public CIdleHandler { public: virtual BOOL PreTranslateMessage(MSG* pMsg){ if(CMDIFrameWindowImpl::PreTranslateMessage(pMsg)) return TRUE; // アクティブな子ウィンドウにメッセージフィルタの機会を与える HWND hWnd = MDIGetActive(); if(hWnd != NULL) return (BOOL)::SendMessage(hWnd, WM_FORWARDMSG, 0, (LPARAM)pMsg); return FALSE; } virtual BOOL OnIdle(){ UIUpdateToolBar(); UIUpdateStatusBar(); return FALSE; } BEGIN_UPDATE_UI_MAP(MdiWindow) // エントリなし END_UPDATE_UI_MAP() BEGIN_MSG_MAP_EX(MdiWindow) MSG_WM_CREATE(OnCreate) COMMAND_ID_HANDLER_EX(ID_APP_EXIT, OnFileExit) COMMAND_ID_HANDLER_EX(ID_FILE_NEW, OnFileNew) COMMAND_ID_HANDLER_EX(ID_WINDOW_CASCADE, OnWindowCascade) COMMAND_ID_HANDLER_EX(ID_WINDOW_TILE_HORZ, OnWindowTile) COMMAND_ID_HANDLER_EX(ID_WINDOW_ARRANGE, OnWindowArrangeIcons) CHAIN_MSG_MAP(CUpdateUI) CHAIN_MSG_MAP(CMDIFrameWindowImpl) END_MSG_MAP() LRESULT OnCreate(LPCREATESTRUCT lpcs); void OnFileExit(UINT uNotifyCode, int nID, HWND hWndCtl){ PostMessage(WM_CLOSE); } void OnFileNew(UINT uNotifyCode, int nID, HWND hWndCtl){ // 子ウィンドウを作成 MdiChild *child = new MdiChild(); child->CreateEx( m_hWndClient ); } void OnWindowCascade(UINT uNotifyCode, int nID, HWND hWndCtl){ // 子ウィンドウを重ねて表示 MDICascade(); } void OnWindowTile(UINT uNotifyCode, int nID, HWND hWndCtl){ // 子ウィンドウを上下に並べて表示 MDITile(); } void OnWindowArrangeIcons(UINT uNotifyCode, int nID, HWND hWndCtl){ // 最小化された子ウィンドウのアイコンを整列 MDIIconArrange(); } }; }}}