如何通过vc/MFC平台实现多点画线?

要求是鼠标左键取点,最后通过右键结束,依次连接各点。

#include <afxwin.h>

#include <vector>//添加,用stl之vector保存点的坐标

using namespace std;//命名空间你懂 


class CMyApp : public CWinApp

{

public:

    virtual BOOL InitInstance ();

};


class CMainWindow : public CFrameWnd

{

public:

    CMainWindow ();

int cntLBtn;//添加 鼠标左键按下次数

vector <CPoint> vec;//添加,用stl之vector保存点的坐标

protected:

    afx_msg void OnPaint ();

afx_msg void OnLButtonDown(UINT nFlags, CPoint point);//参考类向导自动添加代码添加

afx_msg void OnRButtonDown(UINT nFlags, CPoint point);//同上

    DECLARE_MESSAGE_MAP ()

};



CMyApp myApp;


/////////////////////////////////////////////////////////////////////////

// CMyApp member functions


BOOL CMyApp::InitInstance ()

{

    m_pMainWnd = new CMainWindow;

    m_pMainWnd->ShowWindow (m_nCmdShow);

    m_pMainWnd->UpdateWindow ();

    return TRUE;

}


/////////////////////////////////////////////////////////////////////////

// CMainWindow message map and member functions


BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd)

    ON_WM_PAINT ()

ON_WM_LBUTTONDOWN()//参考类向导紫铜添加代码添加

ON_WM_RBUTTONDOWN()//同上

END_MESSAGE_MAP ()


CMainWindow::CMainWindow ()

{

    Create (NULL, _T ("The Hello Application"));

cntLBtn = 0;

}

void CMainWindow::OnLButtonDown(UINT nFlags, CPoint point) //参考类向导紫铜添加代码添加--直接copy来改下类名,注释掉不需要的

{

// TODO: Add your message handler code here and/or call default

//CDialog::OnLButtonDown(nFlags, point);

cntLBtn++;

if(cntLBtn==1)

{

vec.clear();

}

vec.push_back(point);

}


void CMainWindow::OnRButtonDown(UINT nFlags, CPoint point) //同上

{

// TODO: Add your message handler code here and/or call default

//CDialog::OnLButtonUp(nFlags, point);

CClientDC dc(this);

int i = 0;

if(cntLBtn>1)

{

for(i=0;i<cntLBtn-1;i++)

{

dc.MoveTo(vec[i]);

dc.LineTo(vec[i+1]);

}

}

cntLBtn = 0;

}


void CMainWindow::OnPaint ()

{

    /*CPaintDC dc (this);

    

    CRect rect;

    GetClientRect (&rect);


    dc.DrawText (_T ("Hello, MFC"), -1, &rect,

        DT_SINGLELINE | DT_CENTER | DT_VCENTER);*/

}


追问

首先感谢大神的鼎力相助,然后请问可以简单的说一下原理吗?能不能利用对话框增加数据的修改和删除?

追答

以上程序参看mfc程序设计第二版第一章hello改的 mfc最小框架窗口程序
基本思路 添加成员变量 记录左键按下次数 添加向量容器 保存点坐标
添加左键右键按下响应函数,对话框也差不多 没什吗好讲的

温馨提示:内容为网友见解,仅供参考
无其他回答

如何通过vc\/MFC平台实现多点画线?
dc.DrawText (_T ("Hello, MFC"), -1, &rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER);*\/ }

用vc++6.0如何实现画点、画线、画圆?
1.HDC hdc = GetDC(HWND hWnd); 获得设备上下文的客户区一个指定的窗口或整个屏幕 eg:如果是在窗口类中可以:HDC hdc = GetDC(this->m_hWnd);2.在窗口区画点。SetPixel(hdc,x, \/\/ 横坐标 y , \/\/ 纵坐标 RGB(100,100,100)); \/\/点的颜色。3. 画线 MoveToEx(HDC hdc,...

用vc++6.0如何实现画点、画线、画圆,望给个代码。
1.HDC hdc = GetDC(HWND hWnd); 获得设备上下文的客户区一个指定的窗口或整个屏幕 eg:如果是在窗口类中可以:HDC hdc = GetDC(this->m_hWnd);2.在窗口区画点。SetPixel(hdc,x, \/\/ 横坐标 y , \/\/ 纵坐标 RGB(100,100,100)); \/\/点的颜色。3. 画线 MoveToEx(HDC hdc,...

用vc++6.0如何实现画点、画线、画圆?
以下方法可在MFC和控制台中都可以实现:\\x0d\\x0a1.HDC hdc = GetDC(HWND hWnd); 获得设备上下文的客户区一个指定的窗口或整个屏幕\\x0d\\x0aeg:如果是在窗口类中可以:\\x0d\\x0a HDC hdc = GetDC(this->m_hWnd); \\x0d\\x0a2.在窗口区画点。\\x0d\\x0a SetPixel(\\x...

MFC画线的问题,需要多点击一下,线才能画出来。
;dc.LineTo(point);CWnd::OnLButtonUp(nFlags, point);} 以上代码没有问题 你贴出来的代码除多了一行HDC hdc;无用之外没有问题 应该可以实现想要的功能 再找找其他原因吧, 你说的状况很奇怪, 因为m_ptOrigin 在LButtonDown的时候已经保存,第二次点击会更换它的值,还能画出线段实在可疑 ...

请问如何 在MFC,用最简单的方法画出两点一线?而且要持续显示~~_百度知...
1)API函数方法画线用HDC 2)用CDC类成员函数画线。此时别忘记ReleaseDC 3)用CClientDC 4)用CWindowDC,用它甚至可以整个屏幕区域画线。下面是上面4种方法的代码 \/*HDC hdc;hdc=::GetDC(m_hWnd);MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);LineTo(hdc,point.x,point.y);::ReleaseDC(m_...

vc++ MFC画直线的问题
你试试以下代码 , 测过, 没问题啊 void CChildView::OnLButtonUp(UINT nFlags, CPoint point){ CWindowDC dc (this);dc.MoveTo(point);dc.LineTo(m_pt);m_pt = point;CWnd::OnLButtonUp(nFlags, point);} void CChildView::OnLButtonDown(UINT nFlags, CPoint point){ m_pt = point;CWnd:...

...波形图画在同一个窗口上来显示,MFC AppWizard实现
数据就是通过AD转换得来的二进制信号,是TXT文档形式的,有频谱图和时域图,我想通过一个界面来打开这些数据并显示出来,实际上总体的实现如下图: 我目前想做的就是,我手中有了TXT文档信号,想像上面这个图形这样画两个坐标系统,然后打开我有的TXT文档信号并显示出来。 追答 非常不好意思,白拿了你那么多的分.如果仍...

用vc怎么实现画线、圆、矩形、抛物线?
这需要用到图形编程的知识,虽然在VC中没有图形编程的头函数graphics.h,但是现在有人编写了那个头函数,同时在VC中可以用MFC 来作图。用graphics.h作图来实现上述功能代码如下(你可以到网上去找到那个头文件):画线:line(int x1,int y1,int x2,int y2)\/*其中(x1,y1)组成了直线在窗口中的起始...

MFC如何画线
1,为××View类添加变量:BOOL m_bLButtonDown, m_bErase;CPoint p0, pm; \/\/起始点和动态的终点变量 CPen* pGeyPen, *pLinePen;2,在××View类构造函数中,m_bErase=false;m_bLButtonDown=false;pGeyPen=new CPen(PS_SOLID, 1, RGB(128, 128, 128));pLinePen=new CPen(PS_SOLID,...

相似回答