MFC初学者问题,窗口重绘的。

来源:百度知道 编辑:UC知道 时间:2024/06/04 20:26:07
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_spoint.x,m_spoint.y,NULL);
LineTo(hdc,point.x,point.y);
::ReleaseDC(m_hWnd,hdc);
*/
/*CDC *pDC = GetDC();
pDC->MoveTo(m_spoint);
pDC->LineTo(point);
ReleaseDC(pDC);
CView::OnLButtonUp(nFlags, point);
*/

// CClientDC dc(this);
// CClientDC dc(GetParent());

//CWindowDC dc(this);
//CWindowDC dc(GetParent());
CWindowDC dc(GetDesktopWindow());
dc.MoveTo(m_spoint);
dc.LineTo(point);
}
看孙鑫的视频里面的代码,问题是我在画线以后,把窗口最小化,然后在还原的时候,原来的线就没了,怎么才能在窗口重绘后仍然保留原来的内容呢?

还有,CWindowDC dc(GetDesktopWindow());画线的时候他是以桌面的x,y坐标为标准的,也就是说我在窗口里面画了一条线,但是实际上画到了桌面上(窗口之外),可是我还是没有办法在桌面上画图(一点桌面,程序就是去焦点了,根本画不了图),怎么才能真正的在桌面上画图呢?就是说我在桌面上的一点按下左键,然后在桌面上的另一点释放左键,然后就在这亮点之间画一条直线,而不是在窗口里面点击和释放,能明白我的意思吧?

第一个问题,在View里的OnDraw函数中绘制。
第二个问题,比较简单的办法是不用鼠标点击,直接设定坐标绘制(即设定直线的2个坐标点。)

CPoint point1(0,0);
CPoint point2(1024,768);
dc.MoveTo(point1);
dc.LineTo(point2);
如果你非要在程序在去焦点情况下用鼠标点击获得的点绘制,可以使用全局钩子。

把绘图代码改到OnPaint 或 OnDraw 或里面.
数据状态另用变量保存. 鼠标事件里只处理鼠标事件的结果.