请教个问题,如果要在对话框中加载一张图片作为背景,又要实现对话框中的各个控件的透明效果 ,应该怎么做?谢谢

解决方案 »

  1.   

    添加背景
    CBitmap m_bitmap;
    m_bitmap.LoadBitmap(IDB_BITMAP1);
    重载WM_ERASEBKGND消息
    BOOL CMydilog::OnEraseBkgnd(CDC* pDC) 
    {
    // TODO: Add your message handler code here and/or call default

    /*

    if(!m_bitmap.m_hObject)
    return true;

    CRect rect;
    GetClientRect(&rect);
    CDC dc;
    dc.CreateCompatibleDC(pDC);
    CBitmap* pOldBitmap = dc.SelectObject(&m_bitmap);
    int bmw, bmh ;
    BITMAP bmap;
    m_bitmap.GetBitmap(&bmap);
    bmw = bmap.bmWidth;
    bmh = bmap.bmHeight;

    pDC->StretchBlt(0, 0, rect.Width(),
    rect.Height(), &dc,
    0, 0,bmw,bmh, SRCCOPY);


    dc.SelectObject(pOldBitmap);
    */
    return TRUE;
    }控件透明(非所有)
    重载WM_CTLCOLOR消息
    HBRUSH CMydilog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
        int nID = pWnd->GetDlgCtrlID();
    if( nID == IDC_STATIC1) //对指定的控件设属性,你也可以用上面的方法针对所有的标签
    {
            pDC->SetTextColor(RGB(0,0,0) );//多此一举,你可以设文字其它的颜色
        pDC->SetBkMode(TRANSPARENT);
    return HBRUSH(GetStockObject(HOLLOW_BRUSH));
    }
    return hbr;
    }
      

  2.   

    HBRUSH CMydilog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 

    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
        int nID = pWnd->GetDlgCtrlID();         pDC->SetTextColor(RGB(0,0,0) );//多此一举,你可以设文字其它的颜色 
        pDC->SetBkMode(TRANSPARENT); 
    return HBRUSH(GetStockObject(HOLLOW_BRUSH)); }
      

  3.   

    http://www.uieasy.cn/blog/article/21.htm