MFC对话框,已经将整个对话框设置为半透明,在picture控件中插入了一张位图,想把位图的背景也设置成透明。
#defineLWA_COLORKEY0x00000002//方式#defineWS_EX_LAYERED0x00080000typedefBOOL(WINAPI*lpf...
#define LWA_COLORKEY 0x00000002 //方式
#define WS_EX_LAYERED 0x00080000
typedef BOOL (WINAPI *lpfnSetLayeredWindowAttributes)(HWND hWnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
lpfnSetLayeredWindowAttributes SetLayeredWindowAttributes;
//设置成边缘透明
COLORREF maskColor=RGB(0,0,0);
HMODULE hUser32 = GetModuleHandle("user32.dll"); //加载动态链接库
SetLayeredWindowAttributes = (lpfnSetLayeredWindowAttributes)GetProcAddress(hUser32,"SetLayeredWindowAttributes");
//取得SetLayeredWindowAttributes函数指针
//为窗口加入WS_EX_LAYERED扩展属性
SetWindowLong(this->GetSafeHwnd(), GWL_EXSTYLE, GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE)^WS_EX_LAYERED);
//调用SetLayeredWinowAttributes函数
SetLayeredWindowAttributes(this->GetSafeHwnd(), maskColor, 50, LWA_COLORKEY);
FreeLibrary(hUser32); //释放动态链接库
对话框透明使用上面的代码,
在onpaint中也修改了对话框的背景颜色
CRect rc;
GetClientRect( &rc );// 获取客户区
CPaintDC dc(this);
dc.FillSolidRect(&rc, RGB(0,0,0)); // 填充客户区颜色
下面是OnCtlColor函数
HBRUSH CMy3Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) {HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);// TODO: Change any attributes of the DC here// TODO: Return a different brush if the default is not desiredif(nCtlColor== CTLCOLOR_STATIC){//pDC->SetBkMode(OPAQUE); //不透明pDC->SetBkMode(TRANSPARENT); //透明pDC->SetTextColor(m_color); return (HBRUSH)m_brush.GetSafeHandle(); //返回的是m_brush的颜色 } if(nCtlColor== IDC_IMAGE){pDC->SetBkColor(RGB(0,0,0));但是插入的图片的背景色还是原来的样子,请问怎么将其变为透明return m_brush;} return hbr;}
效果图大概就是这样,就是右边的图片的背景弄成透明。 展开
#define WS_EX_LAYERED 0x00080000
typedef BOOL (WINAPI *lpfnSetLayeredWindowAttributes)(HWND hWnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
lpfnSetLayeredWindowAttributes SetLayeredWindowAttributes;
//设置成边缘透明
COLORREF maskColor=RGB(0,0,0);
HMODULE hUser32 = GetModuleHandle("user32.dll"); //加载动态链接库
SetLayeredWindowAttributes = (lpfnSetLayeredWindowAttributes)GetProcAddress(hUser32,"SetLayeredWindowAttributes");
//取得SetLayeredWindowAttributes函数指针
//为窗口加入WS_EX_LAYERED扩展属性
SetWindowLong(this->GetSafeHwnd(), GWL_EXSTYLE, GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE)^WS_EX_LAYERED);
//调用SetLayeredWinowAttributes函数
SetLayeredWindowAttributes(this->GetSafeHwnd(), maskColor, 50, LWA_COLORKEY);
FreeLibrary(hUser32); //释放动态链接库
对话框透明使用上面的代码,
在onpaint中也修改了对话框的背景颜色
CRect rc;
GetClientRect( &rc );// 获取客户区
CPaintDC dc(this);
dc.FillSolidRect(&rc, RGB(0,0,0)); // 填充客户区颜色
下面是OnCtlColor函数
HBRUSH CMy3Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) {HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);// TODO: Change any attributes of the DC here// TODO: Return a different brush if the default is not desiredif(nCtlColor== CTLCOLOR_STATIC){//pDC->SetBkMode(OPAQUE); //不透明pDC->SetBkMode(TRANSPARENT); //透明pDC->SetTextColor(m_color); return (HBRUSH)m_brush.GetSafeHandle(); //返回的是m_brush的颜色 } if(nCtlColor== IDC_IMAGE){pDC->SetBkColor(RGB(0,0,0));但是插入的图片的背景色还是原来的样子,请问怎么将其变为透明return m_brush;} return hbr;}
效果图大概就是这样,就是右边的图片的背景弄成透明。 展开
3个回答
展开全部
意思是把图片显示区域白色部分显示为对话框的颜色?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先透明不是RGB(0,0,0) 应该是pDC->SetBKMode(TRANSPARENT); return (HBRUSH)GetStockObject(NULL_BRUSH); 把你000那一句还成这个 手机回贴真累
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询