
第一步:
在现有的外观框架中,为菜单项的鼠标右键添加一个消息处理程序,该消息处理程序用于处理当我们单击菜单项时可以传递的内容.
如下所示:
这时候我们将看到一个弹出向导对话框,请记住,添加的事件处理程序在DrawView类中,然后我们将发现更改ID的好处,我们可以处理这些事件处理程序区别,不是一堆数字. 如下图所示:
以相同的方式添加要处理的程序. 在这里,我只添加了线条,矩形,椭圆,颜色,设置和事件处理程序.
添加事件处理程序后,再次单击运行时,我们将发现添加事件处理程序的原始灰色菜单项将不再显示为灰色. 并在DrawView类中自动为我们生成以下代码:
void CDrawView :: OnLine()
{
// TODO: 在此处添加命令处理程序代码
}
void CDrawView :: OnRectangle()
{
// TODO: 在此处添加命令处理程序代码
}
void CDrawView :: OnEllipse()
{
// TODO: 在此处添加命令处理程序代码

}
void CDrawView :: OnColor()
{
// TODO: 在此处添加命令处理程序代码
}
void CDrawView :: OnSetting()
{
// TODO: 在此处添加命令处理程序代码
}
运行效果如图所示:
第二步:
离这张最初的图形不远吗?本章的答案是这样,但是在DrawView中进行绘制显然过于严格,并且封装还不够好. 图形基类CShape类,然后建立从CShape继承的CRectangle,CEllipse,CLine三个公共图形子类,以对应于相应的菜单项.
如图所示:
第三步:
完成此操作后mfc画图板程序,我们可以在这些类中进行一些操作,以使此绘图程序逐渐生效. 通过图形的基本属性已知,绘制图形需要起点和重点. 在MFC中,这些具有二维属性的点属于CPoint类,因此我们只需要在基类CShape中定义两个类型为CPoint的变量mShape m_ptOrigin和m_End分别保存起点和终点(变量命名为最佳)按名称显示). 同样,我们添加int变量m_DrawType来保存我绘制的类型
添加变量的方法如下:
第四步: 绘制图形

我们必须首先在DrawView中定义三个相同的变量. 然后,应在刚刚添加的时间处理程序中设置这三个图形的线型. 具体代码如下:
void CDrawView :: OnLine()
{
// TODO: 在此处添加命令处理程序代码
m_DrawType = 1;
}
void CDrawView :: OnRectangle()
{
// TODO: 在此处添加命令处理程序代码
m_DrawType = 2;
}
void CDrawView :: OnEllipse()
{
// TODO: 在此处添加命令处理程序代码
m_DrawType = 3;
}
当然,我们仍然无法绘制.

步骤4: 让我们考虑一下mfc画图板程序,是否在单击鼠标左键时使用Microsoft的图形绘制图形,然后在释放鼠标右键时绘制图形!因此,我们必须使用类向导向我们添加这两条消息. 如下图所示:
第五步:
编写绘图代码实现代码. 我们可以想象,当我们在工作区中单击鼠标左键时,应该将单击的点用作图形的起点,并记录鼠标右键弹出时的终点. 然后绘制图形的过程就是从单击鼠标左键到弹出鼠标左键在此过程中绘制的图形,因此我们必须使我的起始点等于LBottonDown时的输入点,实现代码如下:
void CDrawView :: OnLButtonDown(UINT nFlags,CPoint点)
{
// TODO: 在此处添加消息处理程序代码和/或调用默认值
m_ptOrigin = point;
CView :: OnLButtonDown(nFlags,point);
}
然后将绘图代码添加到LBottonUp中,代码如下:
void CDrawView :: OnLButtonUp(UINT nFlags,CPoint点)
{
// TODO: 在此处添加消息处理程序代码和/或调用默认值
CClientDC dc(this); //创建dc
CP笔(PS_SOLID,1,RGB(255,0,0)); //创建油漆笔 p>
CBrush * pbrush = CBrush :: FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); //创建画笔以在绘制时填充
dc.SelectObject(&pen); //选择笔刷并刷入设备描述表

dc.SelectObject(pbrush);
switch(m_DrawType)//根据绘图类型进行绘图
{
情况1:
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
休息;
情况2:
dc.Rectangle(CRect(m_ptOrigin,point));
休息;
情况3:
dc.Ellipse(CRect(m_ptOrigin,point));
休息;
默认值:
休息;
}
CView :: OnLButtonUp(nFlags,point);
}
运行后,您可以绘制图形,如下图所示:
——————————————————
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-269107-1.html
手机买吗
而更多的国家就看到美国在世界的霸权是多么让人讨厌
帅帅