我创建了一个对话框程序,在对话框上使用了图片作为背景色,然后通过重载OnCtlColor()函数实现CStatic的背景色与对话框背景色一致,然后编译成RELEASE版本,在我的机器上可以正常显示,但我把我的程序拷贝到旁边的机子上就出现了CStatic背景色为原来默认的白色,而没有跟我预料的一样,请问这是怎么回事,该怎么解决?
我的机子是Win2K,装有VC,另一台机子为WIN98,没有VC。

解决方案 »

  1.   

    建议使用WM_ERASEBKGND重绘背景,这样就不虞有此问题了
      

  2.   

    在设置对话框的背景色的时候我就是使用该方法的啊
    我又换了台Win2K的试了一下,好像没有出现原来的问题,但又有新问题出现,其中有个图标好像变了样,好痛苦啊,怎么回事啊
      

  3.   

    你可能用了gdi的新特性,你最好把那段代码放出来看看
      

  4.   

    //重载
    HBRUSH CXTYMp3PlayerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    int Flag;
       HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    Flag = pWnd->GetDlgCtrlID();
       if (Flag == IDC_MODE_AUTOMATICALLY || Flag == IDC_MODE_MANUALLY || Flag == IDC_STATIC 
        || Flag == IDC_PROGRESS)
       {
         pDC->SetTextColor(RGB(0,0,0));
         hbr = (HBRUSH)GetStockObject(NULL_BRUSH);
     pDC->SetBkMode(TRANSPARENT);
             hbr = m_bBrush;
       }  
       return hbr;
    }
    //以下函数实现设置对话框的背景色
    BOOL CXTYMp3PlayerDlg::SetBitmap(UINT nID)
    {
    //
    BOOL bResult = true;
    //
    if(m_pbackground)
    {
    //
    m_pbackground->DeleteObject();
    delete m_pbackground;
    m_pbackground = NULL;
    }
    m_pbackground = new CBitmap();
    bResult = m_pbackground->LoadBitmap(nID); return bResult;
    }BOOL CXTYMp3PlayerDlg::OnEraseBkgnd(CDC* pDC) 
    {
    // TODO: Add your message handler code here and/or call default
    // SetBitmap(IDB_BACKGROUND);
    //to collection bitmap information
    BITMAP bm;
    CDC dcMem; //to get the bitmap information
    m_pbackground->GetObject(sizeof(bm),(LPVOID)&bm); //create the device inviroment and select the bitmap
    dcMem.CreateCompatibleDC(pDC);
    CBitmap * pBmpOld = (CBitmap *)dcMem.SelectObject(m_pbackground); //get the client area
    CRect rcClient;
    GetClientRect(rcClient); pDC->StretchBlt(0,0,
    rcClient.right-rcClient.left,
    rcClient.bottom-rcClient.top,
    &dcMem,
    0,0,
    bm.bmWidth, bm.bmHeight,
    SRCCOPY);
    //
    dcMem.SelectObject(pBmpOld);
    return TRUE;
    // return CDialog::OnEraseBkgnd(pDC);
    }
    //初始化函数
    BOOL CXTYMp3PlayerDlg::OnInitDialog()
    {
    SetBitmap(IDB_BACKGROUND);                //背景图片
    m_bBrush.CreateStockObject(HOLLOW_BRUSH);//m_bBrush 全局变量}