代码如下:void CDlgCalcDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中
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; // 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{

CPaintDC dc(this);
dc.DrawEdge(m_rect, EDGE_SUNKEN, BF_RECT);
UpdateDisplay(CString(_T("abc")));
CDialog::OnPaint();
}
}当我重新把界面缩小在打开时,会出现我所画的,但是不过1秒中后就消失了.
麻烦各位了.

解决方案 »

  1.   

     UpdateDisplay(CString(_T("abc")));
    这个函数里怎么写的?
      

  2.   

    把 CDialog::OnPaint();注释掉试试
      

  3.   

    注释掉了,也没有用.
    UpdateDisplay的代码.void CDlgCalcDlg::UpdateDisplay(LPCTSTR pszDisplay)
    {
    CRect rect1(50, 50, 50, 50);
    CClientDC dc(this);
    CFont * pOldFont = dc.SelectObject(GetFont());
    // 得到字符串真实长度;
    CSize size = dc.GetTextExtent(pszDisplay);
    CRect rect = m_rect;
    rect.InflateRect(-2, -2);
    int x = rect.right - size.cx - m_cxChar;
    int y = rect.top + ((rect.Height() - m_cyChar) / 2);
    // 在指定的矩形内输出文字;ETO_OPAQUE指定了矩形颜色使用背景色
    dc.ExtTextOut(x, y, ETO_OPAQUE, rect, pszDisplay, NULL); 
      dc.SelectObject(pOldFont);
    }
      

  4.   

    响应WM_ERASEBKGND,直接返回TRUE。
      

  5.   

    应该和它没关系,擦在前,画在后啊!
    那你的DrawEdge有效果没?
      

  6.   

    响应WM_ERASEBKGND是背景不会被重绘,跟他没什么实际联系吧?
    我看了一下,也不是重绘背景导致的.我响应了以后效果还是一样的.
    只是背景没有被重绘,麻烦各位看下我设置矩形凹下去的那段.
      

  7.   

    连DrawEdge也没效果?奇怪的很,我都ok,
    哪个控件重绘了?
      

  8.   

    找到原因了,确实是控件覆盖了我的图.
    不是m_rect的问题.
    是画了以后,要把控件窗口destroy掉,不然的话一直覆盖在上面.
    大意了,谢谢pop1210