求MFC 在对话框中画线的实现

ttaileen 2009-02-25 11:06:53
问题:现在有若干个点,想在对话框点击一个按扭后,就把这些点连成直线,显示出来。
因为我是刚接触的MFC,搞不清各类之间的相互联系,所以请大侠们给出比较详细的步骤和说明,不甚感谢!!!
...全文
1102 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
Learn-anything 2009-02-27
  • 打赏
  • 举报
回复
lg
caremsi 2009-02-26
  • 打赏
  • 举报
回复
学习.
zceve 2009-02-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 huayehanshan 的回复:]
C/C++ code
MyDlg.h
/** 存放点的数组 */
CArray<CPoint,CPoint> m_pointArray;
MyDlg.cpp
CMyDlg::InitData()
{
CPoint point;
point.x = 10;
point.y = 10;
m_pointArray.Add(point); // 添加要连接的点

point.x = 20;
point.y = 20;
m_pointArray.Add(point); // 添加要连接的点

....... // 其他的点等等
}

CMyDlg::OK()
{

[/Quote]

你说的2楼应该已经解决了.。。。
(1)用一个容器将你要画的点存放起来。(比如说:起点A,下一个点C,再下一个点B》。。。。)
(2)确定起点后调用moveto(),然后再lineto(),之后继续moveto..lineto....
(3)在点击OK的时候可以::sendmessage(this->hwnd,wm_paint,0,0);
zhkefa 2009-02-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yuhudie203 的回复:]
MoveTo 移动到某点
LineTo 连线到某点
看看这两个函数的用法
[/Quote]

ding
gisperson 2009-02-26
  • 打赏
  • 举报
回复
CPoint* ptArr = new CPoint[Size]; // 大小根据点的个数确定

// 将已知点添加到该数组中
ptArr[0] = pt1;
ptArr[1] = pt2;
.....
ptArr[Size-1] = ptSize;

// 绘制线
CPaintDC dc( this );
dc.Polyline( ptArr, Size );

delete[] ptArr;
sendto66 2009-02-26
  • 打赏
  • 举报
回复
up
redoffice 2009-02-26
  • 打赏
  • 举报
回复
路过,学习了
以后可以用了。。。
ttaileen 2009-02-26
  • 打赏
  • 举报
回复
那些点的坐标给定了,就是想通过这些点坐标画出来连线
thesecretblue 2009-02-26
  • 打赏
  • 举报
回复
xue xi le
zbihong 2009-02-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 waizqfor 的回复:]
引用楼主 ttaileen 的帖子:
问题:现在有若干个点,想在对话框点击一个按扭后,就把这些点连成直线,显示出来。
因为我是刚接触的MFC,搞不清各类之间的相互联系,所以请大侠们给出比较详细的步骤和说明,不甚感谢!!!


C/C++ code
一. 画直线:

步骤一:在视图类中对WM_LBUTTONDOWN和WM_LBUTTONUP消息添加消息响应函数OnLButtonDown和OnLButtonUp

步骤二:在视图类中利用添加成员向导添加成员变…
[/Quote]
说得够详细了,其实你会了函数调用就会MFC了,只是你那按钮就调用你想实现的功能函数就好了,或者是把函数用头文件方式包含进你的工程,直接调用就行了!!!
chjiwei007 2009-02-25
  • 打赏
  • 举报
回复
对啊
我也刚刚学那个c++的mfc
不知道怎么用啊
好想不错
xqls_xqls 2009-02-25
  • 打赏
  • 举报
回复
孙鑫老师的VC视频
waizqfor 2009-02-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ttaileen 的回复:]
你这个是百度百到的吧?不是我想要的啊
[/Quote]
你要的不是对话框中画线吗?
lingyin55 2009-02-25
  • 打赏
  • 举报
回复
lz看看孙鑫老师的VC视频吧
jakqigle 2009-02-25
  • 打赏
  • 举报
回复
\
//一下是对话框上画num×num的方格。
CClientDC dc(this);
CRect rc;
GetClientRect(&rc); //获得当前对话框的rc
//初始坐标点
int X = 15;
int Y = 80;

int W = (rc.Width()-2*X) / Num;
int H = (rc.Height()-Y-20) / Num;


for(int i = 0; i <= Num; i++)
{
//row
MoveToEx(dc, X, Y + i * H, NULL);
LineTo(dc, X + Num * W, Y + i * H);

//col
MoveToEx(dc, X + i * W, Y, NULL);
LineTo(dc, X + i* W, Y + Num * H);

}
ttaileen 2009-02-25
  • 打赏
  • 举报
回复
你这个是百度百到的吧?不是我想要的啊
waizqfor 2009-02-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 ttaileen 的帖子:]
问题:现在有若干个点,想在对话框点击一个按扭后,就把这些点连成直线,显示出来。
因为我是刚接触的MFC,搞不清各类之间的相互联系,所以请大侠们给出比较详细的步骤和说明,不甚感谢!!!
[/Quote]

一. 画直线:

步骤一:在视图类中对WM_LBUTTONDOWN和WM_LBUTTONUP消息添加消息响应函数OnLButtonDown和OnLButtonUp

步骤二:在视图类中利用添加成员向导添加成员变量。名字,例如m_StartPoint,类型为CPoint,访问属性设置为protected

步骤三:在OnLButtonDown和OnLButtonUp 中写如下代码:

void CswdfView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_StartPoint=point;
CView::OnLButtonDown(nFlags, point);
}

void CswdfView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//第一种,使用HDC和API函数

/*HDC hdc;
hdc=::GetDC(m_hWnd);
::MoveToEx(hdc,m_StartPoint.x,m_StartPoint.y,NULL);
::LineTo(hdc,point.x,point.y);
::ReleaseDC(m_hWnd,hdc);
CView::OnLButtonUp(nFlags, point);*/


//第二种,使用CDC类

/*CDC *pDC=GetDC();
pDC->MoveTo(m_StartPoint);
pDC->LineTo(point);
ReleaseDC(pDC);*/


//第三种,使用CClientDC

CClientDC aDC(this);
aDC.MoveTo(m_StartPoint);
aDC.LineTo(point);


}


OK,运行程序,可以画直线了。

二. 画曲线

步骤一:按照画直线中介绍的方法在视图类中添加对WM_MOUSEMOVE消息的响应函数OnMouseMove

步骤二:在OnMouseMove中写如下代码:

void CswdfView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(nFlags==MK_LBUTTON) //判断鼠标左键是否按下,如果按下,则移动时画线
{
CClientDC aDC(this);
aDC.MoveTo(m_StartPoint);
aDC.LineTo(point);
m_StartPoint=point; //将画线的起点移动到鼠标移动后的点
}
CView::OnMouseMove(nFlags, point);
}
叶落寒山 2009-02-25
  • 打赏
  • 举报
回复

MyDlg.h
/** 存放点的数组 */
CArray<CPoint,CPoint> m_pointArray;
MyDlg.cpp
CMyDlg::InitData()
{
CPoint point;
point.x = 10;
point.y = 10;
m_pointArray.Add(point); // 添加要连接的点

point.x = 20;
point.y = 20;
m_pointArray.Add(point); // 添加要连接的点

....... // 其他的点等等
}

CMyDlg::OK()
{

CPen m_Pen;
m_Pen.CreatePen(m_LineStyleNo,m_LineWidth,m_LineColor);
CPen* pOldPen = pDC->SelectObject(&m_Pen);
pDC->MoveTo(m_pointArray[0]);
for (i=1; i < m_pointArray.GetSize(); i++)
{
pDC->LineTo(m_pointArray[i]);
}
pDC->SelectObject(pOldPen);
}





NesTa_xP 2009-02-25
  • 打赏
  • 举报
回复
mfc的话可以使用CDC类的MoveTo()(起点坐标) + LineTo(终点坐标画直线)

CDC::MoveTo
CPoint MoveTo( int x, int y );

CPoint MoveTo( POINT point );

Return Value

The x- and y-coordinates of the previous position as a CPoint object.

Parameters

x

Specifies the logical x-coordinate of the new position.

y

Specifies the logical y-coordinate of the new position.

point

Specifies the new position. You can pass either a POINT structure or a CPoint object for this parameter.

Remarks

Moves the current position to the point specified by x and y (or by point).

yuhudie203 2009-02-25
  • 打赏
  • 举报
回复
MoveTo 移动到某点
LineTo 连线到某点
看看这两个函数的用法
加载更多回复(3)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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