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 desired
if(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;
}

效果图大概就是这样,就是右边的图片的背景弄成透明。
展开
 我来答
baluding
2012-09-03
知道答主
回答量:5
采纳率:0%
帮助的人:7906
展开全部
把picture控件设置成frame样式的试下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
温情时光剪影
2012-09-06 · TA获得超过1634个赞
知道小有建树答主
回答量:607
采纳率:33%
帮助的人:227万
展开全部
SetLayeredWindowAttributes不是可以指定要透明的颜色吗,如果指定的参数正确,却不能透明,说明图片的颜色值和要透明的颜色不一样,虽然看上去是一个颜色
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式