我想在对话框上点左键,选起点,点右键选终点,画一条直线,可是这样只能画一条啊;现在是这样的:void CParsePicDlg::drawLine()
{
CDC* pDC=GetDC();
pDC->SetROP2(R2_COPYPEN);
//画线
CPen pen(PS_SOLID,3,RGB(255,0,0)); //在这里设置线型,线宽及颜色
CPen* pOldPen;
pOldPen=pDC->SelectObject (&pen);
CRect Recto;
GetClientRect(&Recto);
pDC->MoveTo(cpoint.x + rctPicture.left, cpoint.y + rctPicture.top);
pDC->LineTo(cendpoint.x + rctPicture.left, cendpoint.y + + rctPicture.top);
ReleaseDC(pDC);
}
{
CDC* pDC=GetDC();
pDC->SetROP2(R2_COPYPEN);
//画线
CPen pen(PS_SOLID,3,RGB(255,0,0)); //在这里设置线型,线宽及颜色
CPen* pOldPen;
pOldPen=pDC->SelectObject (&pen);
CRect Recto;
GetClientRect(&Recto);
pDC->MoveTo(cpoint.x + rctPicture.left, cpoint.y + rctPicture.top);
pDC->LineTo(cendpoint.x + rctPicture.left, cendpoint.y + + rctPicture.top);
ReleaseDC(pDC);
}
解决方案 »
- VS2010编译的DLL为什么在Win7 32位注册失败?
- 巨巨们,谁能给俺指下这段代码那里错了,关于icmp的
- 如何进行秒差比较???
- 程序员要当心!揭露杭州艾迪康医学检验中心IT部的卑鄙行径!
- 关于picture控件上文字注释的存储?
- 请问各位有经验的程序员:我有一定的MFC经验,想学一下数据库,不知到学习的过程是什么?
- glNormal中的参数怎么确定呢?
- 闲得无聊想做个自动排课系统玩玩请教算法思路?
- 请教:用ASP如何在一个网页打开时弹出一个对话框,让用户输入数据然后网页取得这个数据
- 吐血送分:请问哪个类可以实现二维的、动态数组?
- 为什么我的BCG不能安装static 也不能安装到vs上
- 新手请教个关于指针的问题?
另外,这个函数里面,在释放DC前,没有将创建的画笔删除,
pDC->SelectObject (pOldPen);
pen.DeleteObject();
ReleaseDC(pDC);
pen.DeleteObject(); 还是只可以画一条直线
void CParsePicDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting if (IsIconic())
{
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
} drawLine();
}
你必须将所有的线的都记录!然后画的时候,对这些点都画出来!
你可以定义一个线的结构体
struct edge{
CPoint pt1;
CPoint pt2;
}
在你的CParsePicDlg对话框里面,可以保存这个edge的列表!然后,每添加一条线,就在列表里面添加一个edge,画的时候,是从这个列表里面取数据画!
pt定义为一个CPoint类型的成员变量
响应对话框的WM_LBUTTONDOWN消息
pt.x = point.x;
pt.y = point.y;
点击地一下左键的时候记录下第一个点
点击右键WM_RBUTTONDOWN的消息响应函数中
CDC* pDC=GetDC();
pDC->SetROP2(R2_COPYPEN);
//画线
CPen pen(PS_SOLID,3,RGB(255,0,0)); //在这里设置线型,线宽及颜色
CPen* pOldPen;
pOldPen=pDC->SelectObject (&pen);
pDC->MoveTo(pt.x,pt.y);
pDC->LineTo(point.x,point.y);
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CString spoint;
spoint.Format(_T("x:%d y:%d"),point.x - rctPicture.left, point.y - rctPicture.top);
SetDlgItemText(IDC_MSG, spoint); cpoint.x = point.x - rctPicture.left;
cpoint.y = point.y - rctPicture.top; Invalidate();
CDialog::OnLButtonDown(nFlags, point);
}void CParsePicDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值 cendpoint.x = point.x - rctPicture.left;
cendpoint.y = point.y - rctPicture.top;
Invalidate();
CDialog::OnRButtonDown(nFlags, point);
}
如POINT ptStart[100], ptEnd[100];
int LineCount = 0;
点左键保存起点 ptStart[LineCount],右键保存终点ptEnd[LineCount],LineCount增加1表示多了1条线,
画时就循环啊
for(int = 0; i < LineCount; i++)
{
起点i到终点i
}