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;}

效果图大概就是这样,就是右边的图片的背景弄成透明。
展开
 我来答
相思丶猫2C
2012-09-02 · TA获得超过1198个赞
知道小有建树答主
回答量:1432
采纳率:50%
帮助的人:940万
展开全部
你把图片改成png才行。
png本就有透明度。
追问
用bmp格式应该可以的吧,有没有相关代码
追答
bmp不知道怎么弄
归悦欣cf
2012-09-04 · TA获得超过1443个赞
知道大有可为答主
回答量:4250
采纳率:60%
帮助的人:1289万
展开全部
意思是把图片显示区域白色部分显示为对话框的颜色?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
anddygon
2012-09-04 · TA获得超过230个赞
知道小有建树答主
回答量:143
采纳率:0%
帮助的人:87.5万
展开全部
首先透明不是RGB(0,0,0) 应该是pDC->SetBKMode(TRANSPARENT); return (HBRUSH)GetStockObject(NULL_BRUSH); 把你000那一句还成这个 手机回贴真累
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式