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;
}

  

好多新手都不知道OnEraseBkgnd這個函數在對話框里是怎么添加的,有手工自己寫和系統添加兩種方式,具體使用方法見《VC對話框如何添加WM_ERASEBKGND消息(OnEraseBkgnd函數)》到這里就可以實現位圖了,但STATIC控件背景不透明,顯得很難看。

 

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

 

3、補充說明:如果程序運行過程中,需要設置文本框的字體的話,會出現顯示"字體重疊不刷新"的問題

4、這就要對該控件或者對話框處理了,要刷出新字體來。

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

 

//這里可以刷整個對話框,但如果較頻繁的話,很明顯能看出來,就選擇刷顯示字體的那塊區域就可以了
pWnd ->GetParent()->InvalidateRect(CRect(0,0,100,50),TRUE);

 

好了,沒有問題了,剩下隨便你玩吧,這個解決方法不像網上說的,非要借用人家的自己寫的函數,現在完全用VC提供的就可以了,免得加這個那個的頭文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM