mfc将图形涂满颜色,(c++)使用顺序栈

这篇博客介绍了如何使用C++和MFC,通过顺序栈来实现鼠标左键画线,以及右键点击填充闭合图形内部的颜色。博主详细讲解了鼠标事件的处理,包括鼠标左键下笔选择、线条绘制,以及使用顺序栈判断和填充颜色的算法。
摘要由CSDN通过智能技术生成

写东西的目的,写的东西和时间

古话说,温故而知新可以为师已。写这个可以加深印象,避免写完忘了,还有保存文件,锻炼自己表达。写的都是老尸们的作业,不会太难,所以发文章都在周末,把老师的作业都发在网上,让后辈的童鞋们老尸的魔爪

该问题描述

鼠标左键随意画出一个闭合的图形,鼠标右键单击闭合图形内部将封闭图形的内部涂满颜色
(闲谈:老湿上课,讲顺序栈本来就写书上那个走迷宫的,聊着聊着看我们提不起精神,随口一改成涂颜色了,本质上都是一样的)

鼠标左键下笔的选择

我希望要一支蓝色比较粗的点画线画笔
呃,为了大家都看的懂摘一段关于笔的使用说明
呃,为了大家都看的懂摘一段关于笔的使用说明
因为要封闭故线形默认即可,不改。加粗一点好看清,故第二个参数取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
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值