本帖最后由 mxzy55560593 于 2009-12-20 14:08:12 编辑

解决方案 »

  1.   

    在构造函数中写上m_HollowBrush.CreateStockObject(HOLLOW_BRUSH);HBRUSH CBmpBkgndDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    if(nCtlColor == CTLCOLOR_BTN || nCtlColor == CTLCOLOR_STATIC)
    {
    pDC->SetTextColor(RGB(0,0,255));
    pDC->SetBkMode(TRANSPARENT);
    return (HBRUSH)m_HollowBrush;
    }
    }
    这样就行啦
      

  2.   

    刚试了下匪夷所思啊
    就上面那段代码,用多字节编译效果就如图一样,但在Unicode下效果就不正常,unicode下该怎么写喃?
      

  3.   

    还不错,但对Groupbox显示效果不好!
      

  4.   

    响应WM_ERASEBKGND消息,然后在其实现函数里实现以下代码
    BOOL CXXXDlg::OnEraseBkgnd(CDC* pDC) 
    {
    // TODO: Add your message handler code here and/or call default
    CRect rect;
    GetClientRect(&rect); 


    CBitmap m_pBmp;
    BITMAP bm;
    CDC dcMem;


    m_pBmp.LoadBitmap(IDB_BITMAP1);
    m_pBmp.GetBitmap(&bm);//得到位图尺寸


    dcMem.CreateCompatibleDC(pDC);
    CBitmap* pOldBitmap = dcMem.SelectObject(&m_pBmp);

    pDC->SetStretchBltMode(COLORONCOLOR);//这个模式不设置的话会导致图片严重失真
    pDC->StretchBlt(0,0,rect.Width() ,rect.Height(),
    &dcMem,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
    dcMem.SelectObject(pOldBitmap); 

    return TRUE;
    }接着在OnCtlColor里实现
    if( nCtlColor == CTLCOLOR_DLG ||
    nCtlColor == CTLCOLOR_BTN ||
    nCtlColor ==  CTLCOLOR_STATIC)
    {   
    pDC->SetBkMode(TRANSPARENT);
    }
    if (nCtlColor == CTLCOLOR_LISTBOX)
    {
    return hbr;
    }
    return   HBRUSH(GetStockObject(HOLLOW_BRUSH));就可以了你要贴的图要先导入,比如我的代码就是先导入在bitmap上的IDB_BITMAP1
    希望对你有用