1. 程式人生 > >VS2012使對話方塊透明和改變對話方塊背景顏色或圖片背景

VS2012使對話方塊透明和改變對話方塊背景顏色或圖片背景

在Dlg標頭檔案中public加入:

 CBrush m_bkBrush;  
 
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);

// 在OnInitDialog()

建立一把黃色的背景刷子   
m_bkBrush.CreateSolidBrush(RGB(255,180,100)); 

設定對話方塊透明度
::SetWindowLong( m_hWnd, GWL_EXSTYLE, GetWindowLong(m_hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);  
::SetLayeredWindowAttributes( m_hWnd, 0, 200, LWA_ALPHA); // 120是透明度,範圍是0~255  

編輯OnCtlColor函式

HBRUSH C改變對話方塊背景色、透明度Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor == CTLCOLOR_DLG)   // 判斷是否是對話方塊  
{  
return   m_bkBrush; // 返回剛才建立的背景刷子  
}  
// TODO:  如果預設的不是所需畫筆,則返回另一個畫筆
return hbr;
}

若要新增背景,在onpaint函式中的else中

新增點陣圖的方法在上篇博文中有提到

//CDialogEx::OnPaint();//新增背景時註釋掉
//////////////////新增背景
CPaintDC   dc(this);   
      CRect   rect;   
     GetClientRect(&rect);   
       CDC   dcMem;   
      dcMem.CreateCompatibleDC(&dc);   
      CBitmap   bmpBackground;   
      bmpBackground.LoadBitmap(IDB_BITMAP1);   
            // IDB_BITMAP1是你自己的圖對應的ID   
      BITMAP   bitmap;   
      bmpBackground.GetBitmap(&bitmap);   
      CBitmap   *pbmpOld=dcMem.SelectObject(&bmpBackground);   
      dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,   
    bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);