首页 > 代码库 > 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);
VS2012使对话框透明和改变对话框背景颜色或图片背景