下面是一个非常简单的菜单练习程序,主要练习以上的宏使用: 头文件: #ifndef COMMANDDEMO_H #define COMMANDDEMO_H class CMyApp : public CWinApp { virtual BOOL InitInstance(); }; class CMainWindow : public CFrameWnd { public: CMainWindow(); protected: int nShape, nColor; void OnShape(UINT nID); void OnColor(UINT nID); void OnUpdateRed(CCmdUI* pCmdUI); void OnUpdateGreen(CCmdUI* pCmdUI); void OnUpdateBlue(CCmdUI* pCmdUI); void OnUpdate1(CCmdUI* pCmdUI); void OnUpdate2(CCmdUI* pCmdUI); void OnUpdate3(CCmdUI* pCmdUI); void OnUpdateRect(CCmdUI* pCmdUI); void OnUpdateCircle(CCmdUI* pCmdUI); afx_msg void OnPaint(); DECLARE_MESSAGE_MAP() }; #endif 实现文件: #include <afxwin.h> #include "commandDemo.h" #include "resource.h" CMyApp myApp; BOOL CMyApp::InitInstance() { m_pMainWnd = new CMainWindow; m_pMainWnd->ShowWindow(m_nCmdShow); m_pMainWnd->UpdateWindow(); return TRUE; }; BEGIN_MESSAGE_MAP(CMainWindow, CFrameWnd) ON_WM_PAINT() ON_COMMAND_RANGE(IDM_RECT, IDM_CIRCLE, OnShape) ON_COMMAND_RANGE(IDM_RED, IDM_3, OnColor) ON_UPDATE_COMMAND_UI(IDM_RECT, OnUpdateRect) ON_UPDATE_COMMAND_UI(IDM_CIRCLE, OnUpdateCircle) ON_UPDATE_COMMAND_UI(IDM_RED, OnUpdateRed) ON_UPDATE_COMMAND_UI(IDM_GREEN, OnUpdateGreen) ON_UPDATE_COMMAND_UI(IDM_BLUE, OnUpdateBlue) ON_UPDATE_COMMAND_UI(IDM_1, OnUpdate1) ON_UPDATE_COMMAND_UI(IDM_2, OnUpdate2) ON_UPDATE_COMMAND_UI(IDM_3, OnUpdate3) END_MESSAGE_MAP() CMainWindow::CMainWindow() { Create(NULL, _T("画画图了"), WS_OVERLAPPEDWINDOW, rectDefault, NULL, MAKEINTRESOURCE(IDR_MENU1)); nShape = IDM_RECT; nColor = IDM_RED; } void CMainWindow::OnShape(UINT nID) { nShape = nID; Invalidate(TRUE); } void CMainWindow::OnPaint() { CPaintDC dc(this); RECT rect; COLORREF color[] = { RGB(255, 0, 0), RGB(0, 255, 0), RGB(0, 0, 255), RGB(255, 255, 0), RGB(255, 0, 255), RGB(0, 255, 255) }; CBrush brush; brush.CreateSolidBrush(color[nColor - IDM_RED]); dc.SelectObject(&brush); GetClientRect(&rect); if(nShape == IDM_RECT) { dc.Rectangle(100, 100, rect.right - 100, rect.bottom - 100); } else if(nShape == IDM_CIRCLE) { dc.Ellipse(100, 100, rect.right - 100, rect.bottom - 100); } } void CMainWindow::OnColor(UINT nID) { nColor = nID; Invalidate(TRUE); } void CMainWindow::OnUpdateRed(CCmdUI* pCmdUI) { pCmdUI->SetCheck(nColor == IDM_RED); } void CMainWindow::OnUpdateGreen(CCmdUI* pCmdUI) { pCmdUI->SetCheck(nColor == IDM_GREEN); } void CMainWindow::OnUpdateBlue(CCmdUI* pCmdUI) { pCmdUI->SetCheck(nColor == IDM_BLUE); } void CMainWindow::OnUpdate1(CCmdUI* pCmdUI) { pCmdUI->SetCheck(nColor == IDM_1); } void CMainWindow::OnUpdate2(CCmdUI* pCmdUI) { pCmdUI->SetCheck(nColor == IDM_2); } void CMainWindow::OnUpdate3(CCmdUI* pCmdUI) { pCmdUI->SetCheck(nColor == IDM_3); } void CMainWindow::OnUpdateRect(CCmdUI* pCmdUI) { pCmdUI->SetCheck(nShape == IDM_RECT); } void CMainWindow::OnUpdateCircle(CCmdUI* pCmdUI) { pCmdUI->SetCheck(nShape == IDM_CIRCLE); } 资源描述: //Microsoft Developer Studio generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS / // // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h" / #undef APSTUDIO_READONLY_SYMBOLS / // Chinese (中国) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) #ifdef _WIN32 LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED #pragma code_page(936) #endif //_WIN32 #ifdef APSTUDIO_INVOKED / // // TEXTINCLUDE // 1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h/0" END 2 TEXTINCLUDE DISCARDABLE BEGIN "#include ""afxres.h""/r/n" "/0" END 3 TEXTINCLUDE DISCARDABLE BEGIN "/r/n" "/0" END #endif // APSTUDIO_INVOKED / // // Menu // IDR_MENU1 MENU DISCARDABLE BEGIN POPUP "形状" BEGIN MENUITEM "矩形", IDM_RECT MENUITEM "椭圆", IDM_CIRCLE END POPUP "颜色" BEGIN MENUITEM "红色", IDM_RED MENUITEM "绿色", IDM_GREEN MENUITEM "蓝色", IDM_BLUE MENUITEM "255,255,0", IDM_1 MENUITEM "255,0,255", IDM_2 MENUITEM "0,255,255", IDM_3 END END #endif // Chinese (中国) resources / #ifndef APSTUDIO_INVOKED / // // Generated from the TEXTINCLUDE 3 resource. // / #endif // not APSTUDIO_INVOKED resource.h /{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by commandDemo.rc // #define IDR_MENU1 101 #define IDM_RECT 40001 #define IDM_CIRCLE 40002 #define IDM_RED 40003 #define IDM_GREEN 40004 #define IDM_BLUE 40005 #define IDM_1 40006 #define IDM_2 40007 #define IDM_3 40008 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 102 #define _APS_NEXT_COMMAND_VALUE 40009 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif