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 了,结果偏的更离谱~~为什么第一段代码(注释起来的)好使,第二段就出问题了呢?
展开
 我来答
sqrn
2010-05-25 · 超过12用户采纳过TA的回答
知道答主
回答量:30
采纳率:0%
帮助的人:0
展开全部
看你的代码用的是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);
}

注意, 要左键按住, 移动后再松开

参考资料: MSDN

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c58929f
2010-05-25 · 超过22用户采纳过TA的回答
知道答主
回答量:100
采纳率:0%
帮助的人:79.5万
展开全部
你为什么要用GetDeskTopWindow()的DC呢,View的DC和它的DC不是同一个,你直接CWindowDC dc(this),不就行了??
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式