1. 程式人生 > >VC對話方塊使用OnEraseBkgnd函式點陣圖背景並透明

VC對話方塊使用OnEraseBkgnd函式點陣圖背景並透明

1、使用OnEraseBkgnd函式實現對話方塊點陣圖背景

BOOL CDisplayBmpBackGroundDlg::OnEraseBkgnd(CDC   *pDC)   //增加擦除背景函式
{
 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;
}

到這裡就可以實現點陣圖了,但STATIC控制元件背景不透明,顯得很難看。

2、來我們讓STATIC控制元件透明吧

HBRUSH CDisplayBmpBackGroundDlg::

OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
 if(nCtlColor == CTLCOLOR_DLG || nCtlColor == CTLCOLOR_BTN || nCtlColor ==  CTLCOLOR_STATIC)
  
 {   
         pDC->SetBkMode(TRANSPARENT);     
 }   
 return   HBRUSH(GetStockObject(HOLLOW_BRUSH));
}


到這裡其實就可以了,BMP的圖片背景實現了,文字框的透明也實現了。

3、補充說明:

如果程式執行過程中,需要設定文字框的字型的話,會出現顯示"字型重疊不重新整理"的問題


4、這就要對該控制元件或者對話方塊處理了,要刷出新字型來。

 CWnd* pWnd = GetDlgItem(IDC_STATIC1);
 pWnd->SetWindowText("guohaiyang.blog.163.com");//需要修改的控制元件標題

轉自:http://hi.baidu.com/845915715/blog/item/2320c2315b66df01eac4af54.html