实现MFC菜单画笔画圆,并且打钩

这个是用最简单的方法,移动客户区,圆会不见,所以下一篇我还要改进。

首先新建一个MFC单文件,在资源那里的菜单下,建立画笔,可以弹出红画笔,蓝画笔和绿画笔,,给出ID_RED,ID_BLUE,ID_GREEN并且在视类下建立类向导添加command函数,这时候,我们要想下怎么表示这些颜色,我的做法是,在视类定义一个公有整型变量int m_pencolor,还要设置三个布尔变量(表示打钩状态,等下会说)然后在构造函数初始化为1,(可以默认选红色)在视类头文件加上

{。。。

public:
bool statu2;//绿画笔打钩状态
bool statu1;//蓝画笔打钩状态
bool statu;//红画笔打钩状态
int m_pencolor;

。。。

}

我们默认选的是红画笔,当我们点击其他颜色的笔时,要在相应画笔前面打钩,这时候需要一个更新函数,也是建立类向导,选择视类的更新函数

void CXfView::OnUpdateRed(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
if(m_pencolor=1)

pCmdUI->SetCheck(statu);//把菜单选中 设置3个布尔值

}

void CXfView::OnUpdateBlue(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
if(m_pencolor=2)
pCmdUI->SetCheck(statu1);

}

void CXfView::OnUpdateGreen(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
if(m_pencolor=3)

pCmdUI->SetCheck(statu2);


}

command函数那里写上代码:

void CXfView::OnRed()

{ // TODO: Add your command handler code here

m_pencolor=1;

}    

void CXfView::OnBlue()

{// TODO: Add your command handler code here

m_pencolor=2;

 }

void CXfView::OnGreen()

{// TODO: Add your command handler code here

       m_pencolor=3;

}

然后颜色现在是可以选择了,那么我们要怎样用鼠标画圆呢?

右击视类,添加window message hanlder

void CXfView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
COLORREF color;
switch(m_pencolor)//这里是用选择语句判断选择什么颜色
{
case 1:
color=RGB(255,0,0);//m_pencolor=1为红色
statu=1;//这里还要再在视类设置布尔三个变量,用来表示菜单栏那里是否打钩,

//这里选择红画笔,打钩
statu1=0;
statu2=0;
break;
case 2:
color=RGB(0,0,255);
statu=0;
statu1=1;
statu2=0;
break;
case 3:
color=RGB(0,255,0);
statu=0;
statu1=0;
statu2=1;
break;
}
CPen NewPen, *pOldPen;
NewPen.CreatePen(PS_SOLID,10,color);//实心线
CClientDC dc(this);
pOldPen= dc.SelectObject(&NewPen);

dc.Ellipse(point.x-50,point.y-50,point.x+50 ,point.y+50);//画圆
dc.SelectObject(pOldPen);//这句话(我也不太懂)

CView::OnLButtonDown(nFlags, point);
}

这样就基本好了,这里是临时写的,之前试过是可以的,不知会不会遗漏什么,欢迎大家批评指正。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。