MFC绘制直线

初学MFC,照着孙鑫老师的视频来的,为什么在绘制直线的时候,我的都是鼠标拖动完成之后没有反应,而需要鼠标再点击一下才会出现一条直线,也就是说onLbuttonup没有响应... 初学MFC,照着孙鑫老师的视频来的,为什么在绘制直线的时候,我的都是鼠标拖动完成之后没有反应,而需要鼠标再点击一下才会出现一条直线,也就是说onLbuttonup没有响应吧,可是完全是按照孙鑫老师的来的,都重改了好多遍了还是这种问题。实在搞不懂了,请教给位!谢谢了!部分程序如下:(每种用/* */标记起来的都是一种实现方法,可以用其中的任何一种)
CDrawView::CDrawView()
{// TODO: add construction code here
m_ptOrigin=0;
}

CDrawView::~CDrawView()
{
}

BOOL CDrawView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs

return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CDrawView drawing

void CDrawView::OnDraw(CDC* pDC)
{
CDrawDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}

/////////////////////////////////////////////////////////////////////////////
// CDrawView printing

BOOL CDrawView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}

void CDrawView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}

void CDrawView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CDrawView diagnostics

#ifdef _DEBUG
void CDrawView::AssertValid() const
{
CView::AssertValid();
}

void CDrawView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}

CDrawDoc* CDrawView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDrawDoc)));
return (CDrawDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CDrawView message handlers

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

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
/*HDC hdc;
hdc=::GetDC(m_hWnd);
MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
LineTo(hdc,point.x,point.y);
::ReleaseDC(m_hWnd,hdc);*/
/*CDC *pDC=GetDC();
pDC->MoveTo(m_ptOrigin);
pDC->LineTo(point);
ReleaseDC(pDC);*/

/*CClientDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);*/
/*CClientDC dc(GetParent());
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);*/
/*CWindowDC dc(GetDesktopWindow());
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);*/

CView::OnLButtonUp(nFlags, point);
}
展开
 我来答
百度网友c6b4664
2012-05-08
知道答主
回答量:42
采纳率:0%
帮助的人:15万
展开全部
这样试试:
public:
CMFC练习Doc* GetDocument() const;
CPoint startpoint; //起始点
RECT rcOldClip; //原先的鼠标活动区域
//在头文件中声明

void CMFC练习View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
GetClipCursor(&rcOldClip); // 获得原鼠标活动的有效区域
startpoint=point; //鼠标所在点为起始点
SetCapture(); //进行鼠标捕捉
CView::OnLButtonDown(nFlags, point);
}

void CMFC练习View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
ClipCursor(&rcOldClip); //恢复原来的鼠标活动区
ReleaseCapture(); //释放鼠标捕捉
CView::OnLButtonUp(nFlags, point);
}

void CMFC练习View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this); //获得DC
HCURSOR cusor; //鼠标光标句柄
RECT rcClip; //限值矩形区域
if((nFlags&MK_LBUTTON)==MK_LBUTTON) //移动鼠标左键时是按下的
{
GetWindowRect(&rcClip); //获得客户去窗口区域
ClipCursor(&rcClip); //将鼠标的移动限制在客户区
if((nFlags&MK_CONTROL) !=MK_CONTROL) //ctrl键没有按下
{
cusor=AfxGetApp()->LoadStandardCursor(IDC_CROSS); //载入标准十字光标
SetCursor(cusor); //使用新光标
dc.MoveTo(startpoint.x,startpoint.y); //开始画线
dc.LineTo(point.x,point.y);
startpoint=point;
}
else
{
cusor=AfxGetApp()->LoadStandardCursor(IDC_SIZENS); //载入标准箭头光标
SetCursor(cusor); //使用光标
CBrush mybrush(RGB(0,0,255)); //生成刷子
CBrush *oldbrush; //原刷子指针
oldbrush=dc.SelectObject(&mybrush); //将刷子选入设备,并返回原刷子指针
dc.Rectangle(startpoint.x,startpoint.y,point.x,point.y); //绘制矩形
dc.SelectObject(oldbrush); //恢复原有刷子
}

}
CView::OnMouseMove(nFlags, point);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
DFRobot
2024-11-10 广告
图形化编程是一种直观的编程方式,它通过拖拽图形化的编程积木来构建程序,降低了编程的学习门槛。在上海智位机器人股份有限公司,我们致力于将图形化编程应用于机器人教育等领域,使学习者能够以更加轻松、有趣的方式掌握编程技能。我们的图形化编程平台界面... 点击进入详情页
本回答由DFRobot提供
ltjdyx
2012-05-09 · 超过15用户采纳过TA的回答
知道答主
回答量:34
采纳率:0%
帮助的人:49.1万
展开全部
m_ptOrigin,看现在这个变量是不是CPoint类型。光这看不问题的。
或者你按我的步骤试一试:
1,建立好工程后,项目,类向导,view内中添加UP,DOWN消息。
2,右键点击view类,添加CPoint类型变量m_ptOrigin。
3,down中 ,point = m_ptOrigin。
4,up中,CClientDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式