鼠标绘图仅在指定区域显示,该怎样实现?多谢指点

zyw067 2015-08-10 11:15:39


上图黑色部分仅示意用,表示下文所述的“特定区域”
每次执行View类下的OnDraw都会将整个灰色区域画满图像(从外部读取数据并绘图),现在想在前面绘图的基础上,添加划线功能(直线,多边形等),需要只能在特定区域绘图,超出部分不显示,但绘图的起点或终点可在特定区域外,特定区域只相当于截取了一部分绘图显示出来
最终效果如图,注意五角星下部和右侧直线端点

注意:特定区域没有遮挡之前的绘图,相当于透明画布

请问想实现上面的功能,需要用到哪些知识点或函数呢?恳请大家指点,十分感谢
...全文
123 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿源是少年 2015-08-10
  • 打赏
  • 举报
回复
创建剪裁区绘图:
	// clip
		int iMode = dc.SaveDC();
		CRgn rgn;
		rgn.CreateRectRgn(0, 0, 50, 50);
		dc.SelectClipRgn(&rgn, RGN_AND);
		dc.FillSolidRect(rcClient, RGB(255, 0, 0));
		dc.RestoreDC(iMode);
把CreateRectRgn的参数填入你中间绘图区域参数,在SelectClipRgn之后开始绘制线条,背景图的绘制必须先于SelectClipRgn
worldy 2015-08-10
  • 打赏
  • 举报
回复
绘画之前创建区域,并将创建的区域选入DC,然后正常绘画即可,这样,区域之外,就不会有显示
叶恭介叶恭介 2015-08-10
  • 打赏
  • 举报
回复
学习了。。。
zyw067 2015-08-10
  • 打赏
  • 举报
回复
引用 2 楼 pcradio 的回复:
创建剪裁区绘图:
	// clip
		int iMode = dc.SaveDC();
		CRgn rgn;
		rgn.CreateRectRgn(0, 0, 50, 50);
		dc.SelectClipRgn(&rgn, RGN_AND);
		dc.FillSolidRect(rcClient, RGB(255, 0, 0));
		dc.RestoreDC(iMode);
把CreateRectRgn的参数填入你中间绘图区域参数,在SelectClipRgn之后开始绘制线条,背景图的绘制必须先于SelectClipRgn
谢谢,已实现,不过没用第6行代码

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧