mfc使用顺序栈将一闭合图形内空白区域涂满颜色
写东西的目的,写的东西和时间
古话说,温故而知新可以为师已。写这个可以加深印象,避免写完忘了,还有保存文件,锻炼自己表达。写的都是老尸们的作业,不会太难,所以发文章都在周末,把老师的作业都发在网上,让后辈的童鞋们老尸的魔爪
该问题描述
鼠标左键随意画出一个闭合的图形,鼠标右键单击闭合图形内部将封闭图形的内部涂满颜色
(闲谈:老湿上课,讲顺序栈本来就写书上那个走迷宫的,聊着聊着看我们提不起精神,随口一改成涂颜色了,本质上都是一样的)
鼠标左键下笔的选择
我希望要一支蓝色比较粗的点画线画笔
呃,为了大家都看的懂摘一段关于笔的使用说明
因为要封闭故线形默认即可,不改。加粗一点好看清,故第二个参数取5,颜色取蓝色
NewPen=new CPen(PS_DASHDOT,5,RGB(0,0,255));//画蓝色点划线
左键画出线条
这里要三个监听,鼠标左键按下,鼠标移动和鼠标左键弹起
m_bd做鼠标移动的开关
bool m_bd;
m_pt做过去点的位置记录
CPoint m_pt;
三个控件代码如下
void CDraw_lineView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_pt=point;
m_bd=true;
CView::OnLButtonDown(nFlags, point);
}
void CDraw_lineView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
point_1=point;
CPen *OldPen,*NewPen;
if(m_bd==true)
{
CClientDC dc(this);
NewPen=new CPen(PS_DASHDOT,5,RGB(0,0,255));//画蓝色点划线
OldPen=dc.SelectObject(NewPen);//指定画笔选入设备上下文
dc.SetPixelV(point.x,point.y,RGB(255,255,0));
dc.MoveTo(m_pt);
dc.LineTo(point_1);
dc.SelectObject(OldPen);//将默认的画笔选入设备上下文
delete NewPen;//释放自定义的画笔
m_pt=point;
}
CView::OnMouseMove(nFlags, point);
}
void CDraw_lineView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_bd=false;
CView