静态控件IDC_PICvoid CD001Dlg::OnPaint() 
{
    CDialog::OnPaint();                            (1)
    CWnd * pWnd =  GetDlgItem(IDC_PIC);            (2)
    CDC * dc = pWnd->GetDC();                      (3)
    //pWnd->Invalidate();                          (4)  
    //pWnd->UpdateWindow();                        (5)
    dc->SelectStockObject(BLACK_BRUSH);            (6) 
    dc->Rectangle(0,0,30,10);                      (7)
    pWnd->ReleaseDC(dc);                           (8)}
为什么我注释掉第(4)(5)行黑方块就不显示了呢?

解决方案 »

  1.   

    绘制后控件自己不知道需要重新绘制,所以要update告诉它需要重新绘制。
      

  2.   

    你在CD001Dlg::OnPaint()中进行绘图,而CD001Dlg::OnPaint()只有在对话框接收到WM_PAINT消息后才被调用。Invalidate()和UpdateWindow()起到了这个作用。但是,显然这里效率不好,产生了一个循环:OnPaint(),Invalidate(),OnPaint()...,幸好,Windows处理WM_PIAINT消息不是累计的,否则就是死循环了。
      

  3.   

    这里好像不是让控件重新绘制吧,如果是的话我下面的写法没错吧,但结果却不会出现黑方块!void CD001Dlg::OnPaint() 
    {
        CDialog::OnPaint();                            (1)
        CWnd * pWnd =  GetDlgItem(IDC_PIC);            (2)
        CDC * dc = pWnd->GetDC();                      (3)
        dc->SelectStockObject(BLACK_BRUSH);            (6) 
        dc->Rectangle(0,0,30,10);                      (7)
        pWnd->Invalidate();                            (4)  
        pWnd->UpdateWindow();                          (5)
        pWnd->ReleaseDC(dc);                           (8)}