我在一个继承自CDialog的对话框窗体中,重写了OnPaint函数,想在窗体大小变化时在正中间输出一段文字,现在是一开始是可以输出,但是窗体大小变化时这段文字位置完全没有变化,在GetUpdataRect中也看出此时明明整个窗口都重绘了,请大家帮忙看下。void CAmmterListWnd::OnPaint()
{
    CRect rc;
    GetUpdateRect(&rc, TRUE);    CString csTmp = "";
    csTmp.Format("Trace updateRect left = %d, right = %d, top = %d, bottom = %d", rc.left, rc.right, rc.top, rc.bottom);
    OutputDebugString(csTmp);
    CPaintDC dc(this);       CRect rect;
    GetClientRect(&rect);    dc.DrawText("Test", &rect, DT_CENTER);
   
}

解决方案 »

  1.   

    OnPaint()
    只绘需要绘制的地方,就是有改变的地方
      

  2.   

    谢谢,问题解决了,但是有个问题不明白,就是GetUpdateRect(&rc, TRUE)里,要更新的区域大小明明是整个窗体的大小,难道即使大小时这样,更新的区域还是有差别的吗?
      

  3.   

    我是新手  感觉这倒是一个有趣的问题  窗口大小改变后应该会引发WM_PAINT消息  为什么一定要先把窗口无效化 才能输出呢?呵呵  还有发现LZ一个不好的习惯  你的DC没有释放呢
      

  4.   

    是不是SDK的DC最后处理和MFC的不一样  呵呵
      

  5.   

    就是说我在GetUpdateRect(&rc, TRUE)里看了下要更新的大小,,是整个窗口的大小,这时接下来不是Onpaint更新整个窗口吗? 为什么要还要在OnSize显式的调用InvlidateRect
      

  6.   

    谢谢关注,CPaintDC是局部变量,会自动析构的