我在对话框中的Onpaint()函数中在对话框上画了个矩形,但是在生成对话框的时候却没有出来,是怎么回事??
然后我在OnLButtonDown()中加上InvalidateRect(&rect);只有当rect没有覆盖我画的矩形我点击鼠标后矩形就会出来。而我改用Invalidate()刷新整个窗口矩形就不会出来了。请问当我刷新整个窗口时除了Onpaint()是不是还有什么函数被调用来更新窗口??

解决方案 »

  1.   

    OnPaint()
    {
      CPaintDC dc(this);
      //在此dc上作图即可。
    }
      

  2.   

    CPaintDC dc(this); 
    if (IsIconic())
    {
     // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle
    int cxIcon = GetSystemMetrics(SM_CXICON);
    int cyIcon = GetSystemMetrics(SM_CYICON);
    CRect rect;
    GetClientRect(&rect);
    int x = (rect.Width() - cxIcon + 1) / 2;
    int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon
    dc.DrawIcon(x, y, m_hIcon);
            dc.SelectStockObject (BLACK_BRUSH);
    dc.Rectangle (0,0,200,200);
    }
    else
    {
    CDialog::OnPaint();
    }
            /********************************/ dc.SelectStockObject (BLACK_BRUSH);
    dc.Rectangle (0,0,200,200);
    }
      

  3.   

    void CEditPartsDlg::OnPaint() 
    {
    CPaintDC dc(this); // device context for painting CDC *pDC;
    CWnd *pWnd;
    CRect rect;
    pWnd = GetDlgItem(IDC_STATIC);
    pDC = pWnd->GetDC();
    ::GetClientRect(pWnd->m_hWnd, &rect);
    CPen newPen,*oldPen;
    CBrush newBrush(RGB(0,0,0)), *pOldBrush;
    pOldBrush = (CBrush *)pDC->SelectObject(&newBrush);

    newPen.CreatePen(PS_SOLID, 1,RGB(0,0,0); 
    oldPen = (CPen*)pDC->SelectObject(&newPen); pDC->Rectangle(&rect);
    pDC->SelectObject(pOldBrush);
    pDC->SelectObject(oldPen);
    pWnd->ReleaseDC(pDC);
    }
      

  4.   

    上面就是我的程序,我在对话框中的一个Static Text上画了个矩形,但是对话框产生时没有矩形,只有用InvalidateRect(&rect)刷新一小块矩形区时矩形才出现,当刷新整个屏幕时又不见了。
      

  5.   

    请各位高手帮帮忙啊,用Invalidate()函数刷新时,除了调用Onpaint()还调用了什么函数?
      

  6.   

    Invalidate();回刷新所有控件, 你这样画的矩形可能回被IDC_STATIC盖住了!
    Invalidate()= Invalidate(TRUE);
      

  7.   

    你不是在Static Text上画了矩形,而是在对话框中Static的位置上画了矩形,后来又被Static遮住了
      

  8.   

    不好意思,看错了!
    在OnPaint()后面加一句
    pWnd->Invalidate();
      

  9.   

    CDC *pDC;
    CWnd *pWnd;
    pWnd = GetDlgItem(IDC_STATIC);
    pDC = pWnd->GetDC();
    .......
    这样也是在对话框中画的不是在Static中画的啊??那要怎么样才能不让Static遮住呢??