社区
界面
帖子详情
绘图问题,完全送分
leon19850102
2006-11-28 03:28:19
用MOUSEMOVE函数进行鼠标画图的时候,不管是画点,还是画线,都会出现由于拖动造成的间距不等的问题,怎样可以解决?
详细代码,或直接重要的思路给分,困惑很久的问题.
...全文
351
26
打赏
收藏
绘图问题,完全送分
用MOUSEMOVE函数进行鼠标画图的时候,不管是画点,还是画线,都会出现由于拖动造成的间距不等的问题,怎样可以解决? 详细代码,或直接重要的思路给分,困惑很久的问题.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
26 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
CharlesPrince
2006-12-29
打赏
举报
回复
如果你只是要绘制点和线条的话,只需要处理WM_LBUTTONDOWN事件就可以了:
1.加入全局变量 BOOL IsDrawing;
CPoint prePoint;
//如果想支持重绘的话,可以加入
//CDC MemDC;
2.在构造函数中加入
IsDrawing=FALSE;
//如果支持重绘的话,在OnInitDialog()中加入
//CDC *pDC=GetDC();
//MemDC.CreateCompatibleDC(pDC);
//同时在WM_PAINT处理OnPaint()中
CRect WndRc;
GetWindowRect(&WndRc);
ScreenToClient(&WndRc);
pDC->BitBlt(WndRc.left,WndRc.top,WndRc.right,WndRc.bottom, &memDC,0,0, SRCCOPY);
//同时要注意MemDC的释放
3.生成处理WM_LBUTTONDOWN的函数
4.在这个事件中加入:
OnLButtonDown(UINT nFlag,CPoint point)
if(!IsDrawing)
{
prePoint=point;
IsDrawing=TRUE;
}
else
{
CDC pDC=GetDC()
pDC->MoveTo(&prePoint);
pDC->LineTo(&point);
//如果要重绘把这里的pDC换成为MemDC
//Invalidate(0);
prePoint=point;
}
hoocode
2006-12-29
打赏
举报
回复
http://www.hoocode.com/blog
mousemove
开始记录点
绘图
结束记录点
livedeal
2006-12-06
打赏
举报
回复
LineTo的时候,你最后一个点要用setpixel,不然的话,画的线中间会有断点出来的```
leon19850102
2006-12-06
打赏
举报
回复
wawaku(一堆裤衩!) ,我没有说我用不来MOVE TO ,LINE TO,汗
我问有的人,说直接画似乎没有办法解决这种因鼠标速度造成的问题,shl6894() ,我去找下你那个算法,你有代码吗?你可以详细点说吗?
一分之千
2006-12-05
打赏
举报
回复
现在出现的问题是,画线的时候两点间画直线会变成虚线,而且又不像虚线,每段线长度不一样,有点像上面说的线条不清晰的问题.画点的时候更是有的点多有的点少.
===================================================
你说的是虚线还是折线?折线是走样,虚线的话那就是你程序错误了吧。
如果觉得直接用moveto lineto画出来效果不好的话,建议直接使用象素画法。如布拉斯汉姆(braseham,好像这样写)算法来画。
wawaku
2006-12-05
打赏
举报
回复
-_-!!! 这都不会,汗个
qiujian5628
2006-12-05
打赏
举报
回复
画线会出现这样的问题吗?
画点肯定是会的 但是画线 直接Lineto应该不会有这样的问题
有可能是你的程序中漏掉了某些点的缘故 把前点和后点好好检查看看
leon19850102
2006-12-05
打赏
举报
回复
你的代码不对啊,m_Bitmap是定义的什么??
wacel
2006-12-05
打赏
举报
回复
对话框是不是有OnPaint这个函数,用它不就一样了吗!
eplanet
2006-12-05
打赏
举报
回复
感觉你说的好像是刷新方面的问题吧,可以试试双缓冲算法。
CDC这个东西必须要用一个CBitmap来初始化的,所以m_Bitmap就是做这个的。不然画不出东西。
还是不太理解你的为难题,希望对你有帮助
leon19850102
2006-12-04
打赏
举报
回复
我是在对话框做的啊,没有VIEW这个类,是不是要加到里面才可以?还是有其它办法?
wacel
2006-12-01
打赏
举报
回复
先在View类的OnCreate函数中创建内存DC:
m_clientWidth = GetSystemMetrics(SM_CXSCREEN);//获取客户区宽度
m_clientHeight = GetSystemMetrics(SM_CYSCREEN);//获取客户区高度
CClientDC dc(this);
pMemoDC = new CDC();
pMemoDC->CreateCompatibleDC(&dc);//初始化内存DC
m_Bitmap.CreateCompatibleBitmap(&dc,m_clientWidth,m_clientHeight);//初始化位图
pMemoDC->SelectObject(&m_Bitmap);//将位图选入内存DC
DrawAll();//此时内存DC上没有任何对象,调用此方法仅是将内存DC背景设为白色
注:DrawAll()是我定义的在内容DC上画图形的函数。
然后在MouseMove里面调用DrawAll()在pMemoDC上画图,再用Invalidate(0)使View重绘。不过先得在OnDraw()函数里定一句
pDC->BitBlt(0,0,m_clientWidth,m_clientHeight,pMemoDC,0,0,SRCCOPY);//将内存DC上的图形拷贝到客户区上。
OK了!
leon19850102
2006-11-30
打赏
举报
回复
汗,我表达能力真是差的可以,我详细说下,希望大家帮忙指点指点.就是我先左键点个位置,然后从那个地方开始画线(点),然后在MOUSEMOVE中来画,也就是鼠标跑到哪儿就画到哪儿,shl6894() 说的异或方式我已经解决.现在出现的问题是,画线的时候两点间画直线会变成虚线,而且又不像虚线,每段线长度不一样,有点像上面说的线条不清晰的问题.画点的时候更是有的点多有的点少.
wacel() 能把你的内存DC方法详细说下吗?
wacel
2006-11-29
打赏
举报
回复
你是什么意思呀?如果是鼠标移动过快不能画出流畅的直线的话就好办了。你可以建一个内存DC,先在内存DC上画好,然后把这个内存DC上的内容贴到客户区DC上,就不会出现这各现象了。
一分之千
2006-11-29
打赏
举报
回复
楼主问完问题就跑了啊?你说的是什么意思?
可以使用异或方式进行画图,使得拖动的时候不会造成尾迹
pDC->SetROP2(R2_NOTXORPEN);
然后在画图的时候画两遍
MOVETO(,)
lineto(,)
moveto(,)
lineto(,)
「已注销」
2006-11-29
打赏
举报
回复
如果是这样就好解决了,直接用LINETO连接两个点就行了啊,这样不管是快是慢都可以连续了
islife
2006-11-28
打赏
举报
回复
难道不会把鼠标速度降低后再记录下每次鼠标位置信息,和以往的位置距离进行计算,发现是等距离后再做图吗?
chenzhiwei021
2006-11-28
打赏
举报
回复
楼主的意思是由于鼠标的快速移动会造成的抖动,也就是线条不流畅?
desert_tian
2006-11-28
打赏
举报
回复
拖动造成的间距不等的问题?
不明白意思
「已注销」
2006-11-28
打赏
举报
回复
不明白,再解释一下
加载更多回复(6)
ggplot2分面
绘图
常见
问题
解析
本文深入解析ggplot2分面
绘图
常见
问题
。介绍了facet_wrap与facet_grid两种分面函数的区别及适用场景,阐述了分面中参考线添加的技巧,说明了独立坐标轴范围设置的方法和注意事项,还提及分面标签定制的多种方式,并给出不同阶段的实际应用建议。
【Origin 2021 懒人版
绘图
教程】照做
完全
没
问题
本文分享Origin 2021中文版
绘图
教程,比上次更详细。介绍了数据导入、处理、作图及优化的步骤,如导入数据可选择Text/CSV或Excal格式,处理数据可在Excal中简化,作图时可自动识别坐标名,还能优化坐标轴、图形曲线,最后导出图片并按需修改分辨率和尺寸。
ggplot2分面
绘图
完全
手册(facet_grid行列配置全解析)
本文全面讲解ggplot2中facet_grid和facet_wrap的使用方法,涵盖分面语法结构、单双变量布局、波浪线公式含义、占位符'.'的应用、分类变量排序、图形间距优化及图例与主题美化技巧,帮助用户高效构建多面板可视化图表。
python 等值线
绘图
(contour)出现label不
完全
显示的
问题
博客讲述了给等值线加label时,出现标签不
完全
显示的
问题
。经分析,原因是数据范围大,
绘图
时未裁剪数据,仅设定地理投影范围。对数据进行裁剪后,
问题
解决,
绘图
代码不变时label能正常显示。
界面
15,976
社区成员
115,866
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章