我的对话框里面有个STATIC,我用LineTo在它上面画图。
现在需要在特定的时刻把STATIC里面的图清除掉,然后重新画另一种图。
所以我在某个按钮的单击事件里面写了如下代码:HWND hWndStatic;
hWndStatic = ::GetDlgItem(this->m_hWnd,IDC_STATIC_CANVAS); ::InvalidateRect(hWndStatic,NULL,TRUE);

::SetWindowText(hWndStatic,_T("11111111111")); HDC hdc = ::GetDC(hWndStatic);
LineTo(hdc,30,50);
ReleaseDC(hdc);
DeleteDC(hdc);
结果是原来画的东西是没了,“11111111111”也可以显示出来,但画的那条线却看不见,有时候是一闪而过就没了。请问是哪里的问题?

解决方案 »

  1.   

          LineTo(hdc,0,20);
      

  2.   

    HWND hWndStatic;
    hWndStatic = ::GetDlgItem(this->m_hWnd,IDC_STATIC2);

    ::InvalidateRect(hWndStatic,NULL,TRUE);
        
    ::SetWindowText(hWndStatic,_T("11111111111"));

    HDC hdc = ::GetDC(hWndStatic);
    LineTo(hdc,0,50);
    ::ReleaseDC(hWndStatic,hdc);
    DeleteDC(hdc);
      

  3.   

    InvalidateRect并不更新窗口内容,而仅仅是将窗口内容的一部分标记为无效。直到响应WM_PAINT消息的时候,才真正地将无效区重画。你在InvalidateRect立刻画线,等线画完了才会退出这一次的消息响应,然后才会去响应WM_PAINT,然后你画的线就被顺利地抹杀了
      

  4.   

    你在InvalidateRect后面加一句UpdateWindow,就会立刻重画,重画完了再画线,就没有问题了。