想讓MFC對話框中某個表單控制元件實作背景透明(最好是能夠設定透明度),但不影響上面的文字顯示,這個該怎么實作啊?
希望能夠提供一個例子?
表單控制元件源代碼是自己撰寫的。
希望能夠提供具體例子
uj5u.com熱心網友回復:
void CTestDlg::OnPaint(){
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CRect rc;
GetClientRect(rc);
// maindlg's background
CDC bgDC;
bgDC.CreateCompatibleDC(&dc);
// draw background to srcDC
HBITMAP oldBg;
oldBg=(HBITMAP)bgDC.SelectObject(m_hBitmap);
//
CDC srcDC;
srcDC.CreateCompatibleDC(&dc);
CBitmap srcBMP,*OldSrc;
srcBMP.CreateCompatibleBitmap(&dc, rc.right, rc.bottom);
//not:OldSrc=https://bbs.csdn.net/topics/(CBitmap *)srcDC.SelectObject(srcBMP);// First-chance exception
OldSrc=https://bbs.csdn.net/topics/srcDC.SelectObject(&srcBMP);
srcDC.StretchBlt(0,0,rc.Width(),rc.Height(),
&bgDC,m_Dist.x,m_Dist.y,rc.Width(),rc.Height(),SRCCOPY);
// prepare white blend
CDC bfDC;
bfDC.CreateCompatibleDC(&dc);
CBitmap bfBMP, *OldBf;
bfBMP.CreateCompatibleBitmap(&dc, rc.right, rc.bottom);
OldBf = bfDC.SelectObject(&bfBMP);
bfDC.FillSolidRect(rc, RGB(255, 255, 255));
// Blend to srcDC
BLENDFUNCTION bf = { AC_SRC_OVER, 0, 255/3, 0 };
AlphaBlend(srcDC, 0, 0, rc.Width(), rc.Height(),
bfDC, 0, 0, rc.Width(), rc.Height(), bf);
// output to dc
dc.BitBlt(0,0,rc.Width(),rc.Height(), &srcDC,0,0,SRCCOPY);
// release
bfDC.SelectObject(OldBf);
bfDC.DeleteDC();
bfBMP.DeleteObject();
//
srcDC.SelectObject(OldSrc);
srcDC.DeleteDC();
srcBMP.DeleteObject();
//
bgDC.SelectObject(oldBg);
bgDC.DeleteDC();
// Do not call CDialog::OnPaint() for painting messages
}
uj5u.com熱心網友回復:
SetLayeredWindowAttributesUsing Layered Windows
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/231195.html
標籤:基礎類
上一篇:如何給動態生成的按鈕添加位圖?
