刘华世的官方博客

C++实例 菜单操作2 ON_UPDATE_COMMAND_UI

#include <afxwin.h> 
#include "COMMAND_UI.h"    //载入资源文件所使用之标头文件

class MyFrame : public CFrameWnd
{
private:
    COLORREF color;
public:
    MyFrame()    //建构符
    {
        Create(NULL,    //产生标准视窗
                    "COMMAND_UI",    //视窗标题
                    WS_OVERLAPPEDWINDOW|WS_VISIBLE,    //视窗样式
                    rectDefault,    //视窗大小
                    NULL,    //指向父视窗的指针
                    MAKEINTRESOURCE(IDR_MENU), //菜单栏
                    WS_EX_ACCEPTFILES //接受拖放(容器的扩展属性)
                    );    //使用选单的识别符

        color = RGB(255,0,0);    //将点的颜色预设为红色
    }

    afx_msg void OnRed()    //当Color Menu中Red选项被选取时
    { color = RGB(255,0,0); }    //设定画在画布上的颜色

    afx_msg void OnGreen()    //当Color Menu中Green选项被选取时
    { color = RGB(0,255,0);    }

    afx_msg void OnBlue()    //当Color Menu中Blue选项被选取时
    { color = RGB(0,0,255);    }
    
    //处理ON_UPDATE_COMMAND_UI讯息的函数
    afx_msg void OnUpdateRed(CCmdUI * aCmdUI)
    {                //aCmdUI为指向Red选项的控件指针
        aCmdUI->SetCheck(color == RGB(255,0,0));    //将aCmdUI控件打勾
    }    

    afx_msg void OnUpdateGreen(CCmdUI * aCmdUI)
    { aCmdUI->SetCheck(color == RGB(0,255,0)); } //用color作为开关语句 控制勾选的状态

    afx_msg void OnUpdateBlue(CCmdUI * aCmdUI)
    { aCmdUI->SetCheck(color == RGB(0,0,255)); }

    afx_msg void OnLButtonUp(UINT nFlags, CPoint point)
    { ReleaseCapture(); }//当鼠标左键放开后的回应函数,释放鼠标讯息接收权

    afx_msg void OnLButtonDown(UINT nFlags, CPoint point)
    { SetCapture(); }    //当鼠标左键按下后的回应函数,取得鼠标讯息接收权

    afx_msg void OnMouseMove(UINT nFlags, CPoint point)
    {                //当鼠标移动时的回应函数
        if (this == GetCapture())    //判断鼠标光标是否在视窗之上
        {
            CClientDC aDC(this);    //建立一个画布
            aDC.SetPixel(point, color);    //在画布上画出颜色为color的点
        }
    }

    DECLARE_MESSAGE_MAP()    //声明讯息映射表
};

//建立MyFrame类别的讯息映射表
BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd)
    //回应UPDATE_COMMAND_UI讯息
    ON_UPDATE_COMMAND_UI(IDM_Red, OnUpdateRed) //ON_UPDATE_COMMAND_UI消息先于ON_COMMAND执行
    ON_UPDATE_COMMAND_UI(IDM_Green, OnUpdateGreen)
    ON_UPDATE_COMMAND_UI(IDM_Blue, OnUpdateBlue)
    ON_COMMAND(IDM_Red, OnRed)
    ON_COMMAND(IDM_Green, OnGreen)
    ON_COMMAND(IDM_Blue, OnBlue)
            //回应鼠标讯息
    ON_WM_LBUTTONDOWN()
    ON_WM_MOUSEMOVE()
    ON_WM_LBUTTONUP()
END_MESSAGE_MAP()

class MyApp : public CWinApp    //应用程序类别
{
public:
    BOOL InitInstance()    //程序进入点
    {
        CFrameWnd *Frame = new MyFrame;
        m_pMainWnd = Frame;
        Frame->ShowWindow(SW_SHOW);    //显示视窗
        
        return true;
    }
} a_app;    //声明应用程序控件

 

posted @ 2013-03-12 17:45  pythonschool  阅读(551)  评论(0编辑  收藏  举报
刘华世的官方博客