/* mainfrm.h ******************************************************************
Author: Paul Watt
Date: 3/2/2002
Purpose:
******************************************************************************/
#ifndef __MAINFRM_H
#define __MAINFRM_H
class CMainFrame : public CFrameWindowImpl<CMainFrame>, public CUpdateUI<CMainFrame>,
public CMessageFilter, public CIdleHandler
{
public:
DECLARE_FRAME_WND_CLASS(NULL, IDR_MAINFRAME)
CRgnGuideView m_view;
virtual BOOL PreTranslateMessage(MSG* pMsg)
{
if(CFrameWindowImpl<CMainFrame>::PreTranslateMessage(pMsg))
return TRUE;
return m_view.PreTranslateMessage(pMsg);
}
virtual BOOL OnIdle()
{
HMENU hMenu = GetMenu();
UINT nMode = m_view.GetMode();
UINT nViewMode = m_view.GetViewMode();
UISetCheck(ID_SHAPE_RECTANGLE, ID_SHAPE_RECTANGLE == nMode);
UISetCheck(ID_SHAPE_ELLIPSE, ID_SHAPE_ELLIPSE == nMode);
UISetCheck(ID_SHAPE_ROUNDRECT, ID_SHAPE_ROUNDRECT == nMode);
UISetCheck(ID_VIEW_1, RGN1 == nViewMode);
UISetCheck(ID_VIEW_2, RGN2 == nViewMode);
UISetCheck(ID_VIEW_ALL, ALL == nViewMode);
UISetCheck(ID_VIEW_BREAKDOWN_1, BREAK1 == nViewMode);
UISetCheck(ID_VIEW_BREAKDOWN_2, BREAK2 == nViewMode);
UIUpdateToolBar();
return FALSE;
}
BEGIN_MSG_MAP(CMainFrame)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
COMMAND_ID_HANDLER(ID_APP_EXIT, OnFileExit)
COMMAND_ID_HANDLER(ID_FILE_CLEAR, OnFileClear)
COMMAND_ID_HANDLER(ID_FILE_CLEAR_1, OnFileClear)
COMMAND_ID_HANDLER(ID_FILE_CLEAR_2, OnFileClear)
COMMAND_ID_HANDLER(ID_VIEW_ALL, OnView)
COMMAND_ID_HANDLER(ID_VIEW_1, OnView)
COMMAND_ID_HANDLER(ID_VIEW_2, OnView)
COMMAND_ID_HANDLER(ID_VIEW_BREAKDOWN_1, OnView)
COMMAND_ID_HANDLER(ID_VIEW_BREAKDOWN_2, OnView)
COMMAND_RANGE_HANDLER(ID_SHAPE_RECTANGLE, ID_SHAPE_ROUNDRECT, OnShapeSet)
COMMAND_ID_HANDLER(ID_VIEW_TOOLBAR, OnViewToolBar)
COMMAND_ID_HANDLER(ID_VIEW_STATUS_BAR, OnViewStatusBar)
CHAIN_MSG_MAP(CUpdateUI<CMainFrame>)
CHAIN_MSG_MAP(CFrameWindowImpl<CMainFrame>)
END_MSG_MAP()
BEGIN_UPDATE_UI_MAP(CMainFrame)
UPDATE_ELEMENT(ID_SHAPE_RECTANGLE, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)
UPDATE_ELEMENT(ID_SHAPE_ELLIPSE, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)
UPDATE_ELEMENT(ID_SHAPE_ROUNDRECT, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)
UPDATE_ELEMENT(ID_VIEW_1, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)
UPDATE_ELEMENT(ID_VIEW_2, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)
UPDATE_ELEMENT(ID_VIEW_ALL, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)
UPDATE_ELEMENT(ID_VIEW_BREAKDOWN_1, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)
UPDATE_ELEMENT(ID_VIEW_BREAKDOWN_2, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)
END_UPDATE_UI_MAP()
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
CreateSimpleToolBar();
CreateSimpleStatusBar();
m_hWndClient = m_view.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);
UIAddToolBar(m_hWndToolBar);
UISetCheck(ID_VIEW_TOOLBAR, 1);
UISetCheck(ID_VIEW_STATUS_BAR, 1);
CMessageLoop* pLoop = _Module.GetMessageLoop();
pLoop->AddMessageFilter(this);
pLoop->AddIdleHandler(this);
return 0;
}
LRESULT OnShapeSet(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
m_view.SetMode(wID);
return 0;
}
LRESULT OnFileExit(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
PostMessage(WM_CLOSE);
return 0;
}
LRESULT OnFileClear(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
//C: Clear the appropriate region based on the wID.
if (ID_FILE_CLEAR == wID)
{
::SetRectRgn(::g_rgnDoc.hSrc1, 0,0,0,0);
::SetRectRgn(::g_rgnDoc.hSrc2, 0,0,0,0);
}
else if (ID_FILE_CLEAR_1 == wID)
{
::SetRectRgn(::g_rgnDoc.hSrc1, 0,0,0,0);
}
else if (ID_FILE_CLEAR_2 == wID)
{
::SetRectRgn(::g_rgnDoc.hSrc2, 0,0,0,0);
}
RedrawWindow(NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_UPDATENOW | RDW_ALLCHILDREN);
return 0;
}
LRESULT OnView(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
//C: Clear the appropriate region based on the wID.
if (ID_VIEW_ALL == wID)
{
m_view.SetViewMode(ALL);
}
else if (ID_VIEW_1 == wID)
{
m_view.SetViewMode(RGN1);
}
else if (ID_VIEW_2 == wID)
{
m_view.SetViewMode(RGN2);
}
else if (ID_VIEW_BREAKDOWN_1 == wID)
{
m_view.SetViewMode(BREAK1);
}
else if (ID_VIEW_BREAKDOWN_2 == wID)
{
m_view.SetViewMode(BREAK2);
}
return 0;
}
LRESULT OnViewToolBar(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
BOOL bNew = !::IsWindowVisible(m_hWndToolBar);
::ShowWindow(m_hWndToolBar, bNew ? SW_SHOWNOACTIVATE : SW_HIDE);
UISetCheck(ID_VIEW_TOOLBAR, bNew);
UpdateLayout();
return 0;
}
LRESULT OnViewStatusBar(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
BOOL bNew = !::IsWindowVisible(m_hWndStatusBar);
::ShowWindow(m_hWndStatusBar, bNew ? SW_SHOWNOACTIVATE : SW_HIDE);
UISetCheck(ID_VIEW_STATUS_BAR, bNew);
UpdateLayout();
return 0;
}
};
#endif