社区
图形处理/算法
帖子详情
CDialogBar为基类的对话框,用对话框绘制圆已经实现。但用鼠标直接在视图中绘制圆不知道怎样做?请教高人
jk11100
2003-08-18 05:38:39
CDialogBar为基类的对话框,用对话框绘制圆已经实现,但用鼠标直接在视图中绘制圆不知道怎样做?请教高人。
请大家详细点,我一定会给分的。
...全文
74
6
打赏
收藏
CDialogBar为基类的对话框,用对话框绘制圆已经实现。但用鼠标直接在视图中绘制圆不知道怎样做?请教高人
CDialogBar为基类的对话框,用对话框绘制圆已经实现,但用鼠标直接在视图中绘制圆不知道怎样做?请教高人。 请大家详细点,我一定会给分的。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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方式。
MFC常用类继承图.doc
- `CView` 类
直接
或间接地继承了`CWnd`类,负责在窗口
中
绘制
文档内容。 - `CFrameWnd` 和 `C
Dialog
` 都是从`CWnd`类派生的,分别用于创建框架窗口和
对话框
。 - `CCommon
Dialog
` 类是所有标准
对话框
类的
基类
,这些...
MFC 类结构关系图
- 使用`CButton`来添加一个按钮到
对话框
中
。 - 在按钮的点击事件
中
调用`AfxMessageBox`函数显示消息。 #### 五、总结 MFC通过其精心设计的类结构,为开发者提供了一个强大的工具箱来构建Windows应用程序。理解MFC...
MFC类对应的头文件
它允许应用程序将内存
中
的对象转换为磁盘上的文件,或将文件
中
的数据转换回内存
中
的对象。`afx.h` 头文件是MFC的核心头文件之一,包含了许多基础类和宏定义。 ##### CArray (afxtempl.h) `CArray` 类提供了一种...
MFC类目录及头文件
- **应用场景**:用于在ActiveX控件
中
实现
属性的异步加载,以提高加载速度。 ##### 2.38 CDateTimeCtrl - **描述**:封装新的日期/时间选取器控件。 - **头文件**:`afxdtctl.h` - **应用场景**:用于创建日期时间...
MFC在
对话框
中
实现
打印和打印预览
mfc
对话框
没有打印预览功能,自己使用创建单文档,利用单文档进行打印和打印预览
图形处理/算法
19,471
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章