社区
图形处理/算法
帖子详情
CDialogBar为基类的对话框,用对话框绘制圆已经实现。但用鼠标直接在视图中绘制圆不知道怎样做?请教高人
jk11100
2003-08-18 05:38:39
CDialogBar为基类的对话框,用对话框绘制圆已经实现,但用鼠标直接在视图中绘制圆不知道怎样做?请教高人。
请大家详细点,我一定会给分的。
...全文
53
6
打赏
收藏
CDialogBar为基类的对话框,用对话框绘制圆已经实现。但用鼠标直接在视图中绘制圆不知道怎样做?请教高人
CDialogBar为基类的对话框,用对话框绘制圆已经实现,但用鼠标直接在视图中绘制圆不知道怎样做?请教高人。 请大家详细点,我一定会给分的。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wrcluomo
2003-08-19
打赏
举报
回复
有点乱,可以精简。
wrcluomo
2003-08-19
打赏
举报
回复
mousemove:
//过两点画圆
if(m_Circle1)
{
//擦去上次的画
pdc->MoveTo(m_Begin.x ,m_Begin.y );
pdc->LineTo(m_OldEnd.x ,m_OldEnd.y );
//重新绘画
pdc->MoveTo(m_Begin.x ,m_Begin.y );
pdc->LineTo(m_End.x ,m_End.y );
int r=(int)sqrt((m_OldEnd.x-m_Begin.x)*(m_OldEnd.x-m_Begin.x)+(m_OldEnd.y-m_Begin.y)*(m_OldEnd.y-m_Begin.y))/2;
int r1=(int)sqrt((m_End.x-m_Begin.x)*(m_End.x-m_Begin.x)+(m_End.y-m_Begin.y)*(m_End.y-m_Begin.y))/2;
CPoint cpoint,point1,point11,point2,point22;
cpoint.x=(m_OldEnd.x+m_Begin.x)/2;
cpoint.y=(m_OldEnd.y+m_Begin.y)/2;
cpoint.Offset(-r,-r);
point1=cpoint;
cpoint.x=(m_OldEnd.x+m_Begin.x)/2;
cpoint.y=(m_OldEnd.y+m_Begin.y)/2;
cpoint.Offset(r,r);
point11=cpoint;
cpoint.x=(m_End.x+m_Begin.x)/2;
cpoint.y=(m_End.y+m_Begin.y)/2;
cpoint.Offset(-r1,-r1);
point2=cpoint;
cpoint.x=(m_End.x+m_Begin.x)/2;
cpoint.y=(m_End.y+m_Begin.y)/2;
cpoint.Offset(r1,r1);
point22=cpoint;
pdc->Ellipse(CRect(point1,point11));//擦去上次的画
pdc->Ellipse(CRect(point2,point22));//重新绘画
}
lbuttondown:
if(m_Circle1)
{
m_OldDrawMode=pdc->SetROP2(R2_NOTXORPEN);
//pen.CreatePen(PenStyle,PenWidth,m_PenColor); //PS_SOLID
// OldPen=pdc->SelectObject(&pen);
//重新绘画
//pdc->MoveTo(m_Begin.x ,m_Begin.y );
// pdc->LineTo(m_OldEnd.x ,m_OldEnd.y );
pdc->MoveTo(m_Begin.x ,m_Begin.y );
pdc->LineTo(m_End.x ,m_End.y );
if(m_LineMeasure)
{
//m_pGridCtrl->SetItemText(0, 1,"直径");
int InsertRow;
double LineLen;
CString strMessage;
strMessage.Format (_T ("%d"),m_pGridCtrl->GetRowCount());
InsertRow=m_pGridCtrl->InsertRow(strMessage, -1);//-1为在最后增加一行
LineLen=sqrt((m_End.x-m_Begin.x-1)*(m_End.x-m_Begin.x-1)*CurrentScaler.HCoefficient*CurrentScaler.HCoefficient+(m_End.y-m_Begin.y-1)*(m_End.y-m_Begin.y-1)*CurrentScaler.VCoefficient*CurrentScaler.VCoefficient);
strMessage.Format (_T ("%.4f"),LineLen);
m_pGridCtrl->SetItemText(InsertRow, 1,strMessage);
m_pGridCtrl->RedrawRow(InsertRow);
}
pdc->SetROP2(m_OldDrawMode);
// pdc->SelectObject(OldPen);
//pen.DeleteObject();
CBrush Brush,*OldBrush;
OldBrush=(CBrush*)pdc->SelectStockObject(NULL_BRUSH);
int r1=(int)sqrt((m_End.x-m_Begin.x)*(m_End.x-m_Begin.x)+(m_End.y-m_Begin.y)*(m_End.y-m_Begin.y))/2;
CPoint cpoint,point2,point22;
cpoint.x=(m_Begin.x+m_End.x)/2;
cpoint.y=(m_Begin.y+m_End.y)/2;
//cpoint=m_Begin;
cpoint.Offset(-r1,-r1);
point2=cpoint;
cpoint.x=(m_Begin.x+m_End.x)/2;
cpoint.y=(m_Begin.y+m_End.y)/2;
//cpoint=m_Begin;
cpoint.Offset(r1,r1);
point22=cpoint;
//重新绘画
pdc->Ellipse(CRect(point2,point22));
//将直线画到图形上
// if(!m_LineMeasure)
// {
// CBrush *OldMemBrush;
// OldMemBrush=(CBrush*)pMemDC->SelectStockObject(NULL_BRUSH);
// pMemDC->Ellipse(point2.x+ScrollPoint.x,point2.y+ScrollPoint.y,point22.x+ScrollPoint.x,point22.y+ScrollPoint.y);
// pMemDC->SelectObject(OldMemBrush);
//}
pdc->SelectObject(OldBrush);
}
Napoleo
2003-08-19
打赏
举报
回复
一句话:
在鼠标事件中画图
Sportbeuty
2003-08-18
打赏
举报
回复
这个很多书有例程序的,北京希望电子出版社的数字图象处理学,就有。我看过,记得和楼上的大侠说得差不多。^_^
Sportbeuty
2003-08-18
打赏
举报
回复
这个很多书有例程序的,北京希望电子出版社的数字图象处理学,就有。我看过,记得和楼上的大侠说得差不多。^_^
GZCompiler
2003-08-18
打赏
举报
回复
首先明确鼠标绘图的操作,我设计如下:
1. 按下左键确定圆心;
2. 按住左键拖动出半径,同时画临时圆;
3. 松开左键确定半径,画出最终的圆。
实现方法:
1. 按下左键确定圆心;
在OnLeftBtnDown消息中,记录point.x与point.y作为圆心,保存在某个POINT变量中;
2. 按住左键拖动出半径,同时画临时圆;
在OnMouseMove消息中:
根据上一次的鼠标point,与先前记录的圆心,用CDC::SetROP2(R2_NOT)方式绘制圆形(达到擦除目的);
记录当前鼠标point坐标,以便下次清除临时圆;
根据当前鼠标point,与先前记录的圆心,用CDC::SetROP2(R2_NOT)方式绘制新的圆形;
3. 松开左键确定半径,画出最终的圆。
在OnLeftBtnUp函数中:
根据鼠标point和先前记录的半径,用黑色绘制永久圆形。注意:此时不用R2_NOT方式。
略谈如何在
对话框
创建
视图
类画图
略谈如何在
对话框
创建
视图
类画图 http://blog.csdn.net/clever101/archive/2009/01/14/3779089.aspx 作者:朱金灿 来源:blog.csdn.net/clever101 在
对话框
上画图可以通过添
MC view 在
对话框
的使用方法
在
对话框
上画图可以通过添加控件来进行,但这种画图有一个严重弊端就是画图范围受控件范围控制。最近
做
一个程序,需要一个数据报告窗口,因为输出的内容比较多,格式不一致(涉及多个表,但每个表的数据要严格对齐)...
VC++
中
一些常见问题的解决方法
(转)VC++
中
一些常见问题的解决方法 ...(2)在基于
对话框
的程序
中
,一按回车键,
对话框
就没了。 把确定按纽的缺省属性前面的对勾去掉,重载OnOk()函数,在OnOk()函数里注释掉调用
基类
的OnOk()函数那
MFC
中
CMFCColorBar添加控件后显示为灰色的解决方案
然而,有时候在添加其他控件到CMFCColorBar后,这些控件可能会显示为灰色,而无法正常显示。当我们向CMFCColorBar添加其他控件时,...然后,在CMyColorBar的
实现
文件
中
,重写OnDraw函数,并在其
中
处理其他控件的
绘制
。
详解MFC框架窗口、文档和
视图
尽管窗口、文档和
视图
是MFC的基础,但可能也是最不容易理解的部分,因为其概念比传统编程所需要的Windows函数更强一些,因此,须在本章
做
进一步详细讨论框架窗口、文档和
视图
的方法和技巧。 6.1框架窗口 分两类:...
图形处理/算法
19,468
社区成员
50,698
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章