您的位置:首页 > 编程语言 > C语言/C++

C++实例 菜单操作2 ON_UPDATE_COMMAND_UI

2013-03-12 17:45 393 查看
#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;    //声明应用程序控件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: