MFC基本对话框的背景透明化

首先,插入一张位图格式为BMP,将ID改为IDB_BITMAP接下来,添加一个静态文本和编辑按钮。

接着,打开类向导。选择class lnfo(类向导最后一项)

即可看到Message filter 在下拉框中选择window,返回Message Maps,选择CxxDlg ,

接着找到WM_EraseBkgnd,双击即可添加一个函数   在函数里面添加代码 即可得到如下所示

BOOL CTaoDlg::OnEraseBkgnd(CDC* pDC) 
{
 CDialog::OnEraseBkgnd(pDC);
 HBITMAP   m_hBitmap; 
 HDC           m_hBkDC; 
 m_hBitmap  = ::LoadBitmap(::GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP)); 
 m_hBkDC    = ::CreateCompatibleDC(pDC-> m_hDC); 
 if(m_hBitmap&&m_hBkDC)
 { 
  ::SelectObject(m_hBkDC,m_hBitmap); 
  ::StretchBlt(pDC-> m_hDC,0,0,700,610,m_hBkDC,0,0,700,610,SRCCOPY); 
  ::DeleteObject(m_hBitmap); 
  ::DeleteDC(m_hBkDC); 
 }

 return TRUE;


}

接下来 ,在Message Maps中添加WM_CTLCOLOR。双击进入写下代码如下

HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
 
 if(nCtlColor == CTLCOLOR_STATIC ) 
 { 
  pDC->SetBkMode(TRANSPARENT);//设置背景透明 
  //pDC->SetTextColor(RGB(255,255,0));//设置静态文本字体颜色为黄色

  return (HBRUSH)::GetStockObject(NULL_BRUSH); 
 }
return hbr;
}

点击运行即可  注意上面加红的需要根据你的MFC程序名来确定

  

猜你喜欢

转载自blog.csdn.net/taoszu/article/details/43712665