vc++ MFC画直线的问题
核心代码如下:voidCMainView::OnLButtonDown(UINTnFlags,CPointpoint){//TODO:Addyourmessagehand...
核心代码如下:
void CMainView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_point = point;
CView::OnLButtonDown(nFlags, point);
}
void CMainView::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_point.x,m_point.y,NULL);
LineTo(hdc,point.x,point.y);
::ReleaseDC (m_hWnd,hdc);*/
CWindowDC Cdc(GetDesktopWindow ());
Cdc.MoveTo (m_point.x ,m_point.y);
Cdc.LineTo (point.x,point.y );
CView::OnLButtonUp(nFlags, point);
}
基本功能就是根据鼠标不同位置画直线,在用HDC创建时画的直线正好是鼠标按下和松开的位置,但用cwindowDC创建句柄时,画出的直线总是偏离鼠标位置,比如在屏幕中间画的直线,可显示的却是在中间偏上(不是鼠标按下松开的正确位置,用cclinetDC创建也有同样问题),请问这是怎么回事?
我用过ScreenToClient, 或 ClientToScreen 了,结果偏的更离谱~~为什么第一段代码(注释起来的)好使,第二段就出问题了呢? 展开
void CMainView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_point = point;
CView::OnLButtonDown(nFlags, point);
}
void CMainView::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_point.x,m_point.y,NULL);
LineTo(hdc,point.x,point.y);
::ReleaseDC (m_hWnd,hdc);*/
CWindowDC Cdc(GetDesktopWindow ());
Cdc.MoveTo (m_point.x ,m_point.y);
Cdc.LineTo (point.x,point.y );
CView::OnLButtonUp(nFlags, point);
}
基本功能就是根据鼠标不同位置画直线,在用HDC创建时画的直线正好是鼠标按下和松开的位置,但用cwindowDC创建句柄时,画出的直线总是偏离鼠标位置,比如在屏幕中间画的直线,可显示的却是在中间偏上(不是鼠标按下松开的正确位置,用cclinetDC创建也有同样问题),请问这是怎么回事?
我用过ScreenToClient, 或 ClientToScreen 了,结果偏的更离谱~~为什么第一段代码(注释起来的)好使,第二段就出问题了呢? 展开
2个回答
展开全部
看你的代码用的是MFC 吧, 怎么既用 MFC 的又用 WIN API 的原始函数 @_ @
看了一下文档 , 消息函数返回的 CPoint 是相对视图的
" [in] point
Specifies the x and y coordinates of the pointer, relative to the upper-left corner of the window.
"
你试试以下代码 , 测过, 没问题啊
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::OnLButtonDown(nFlags, point);
}
注意, 要左键按住, 移动后再松开
看了一下文档 , 消息函数返回的 CPoint 是相对视图的
" [in] point
Specifies the x and y coordinates of the pointer, relative to the upper-left corner of the window.
"
你试试以下代码 , 测过, 没问题啊
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::OnLButtonDown(nFlags, point);
}
注意, 要左键按住, 移动后再松开
参考资料: MSDN
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询