GDI做的PNG透明不规则窗体,拖上去的控件看不见,控件全透明了 本帖最后由 microsft_apple 于 2012-08-15 12:21:35 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个是我用API函数写的函数,里面的g_Image是个GDI+中的Image*对象。我是用它来半透明窗口的,你试试用在控件上行不行。void SetTransparent(HWND hWnd,UINT nTransparent){ BLENDFUNCTION Blend; HDC hdcMemory; int nBakWidth , nBakHeight; Blend.BlendOp=0; Blend.BlendFlags=0; Blend.AlphaFormat=1; Blend.SourceConstantAlpha=nTransparent; nBakWidth =g_Image->GetWidth(); nBakHeight =g_Image->GetHeight(); HDC hdcTemp=GetDC(hWnd); hdcMemory=CreateCompatibleDC(hdcTemp); HBITMAP hBitMap=CreateCompatibleBitmap(hdcTemp,nBakWidth,nBakHeight); SelectObject(hdcMemory,hBitMap); RECT rect; GetWindowRect(hWnd,&rect); POINT ptWinPos={rect.left,rect.top}; Graphics graph(hdcMemory); Point points[] = {Point(0, 0), Point(nBakWidth, 0),Point(0, nBakHeight)}; graph.DrawImage(g_Image, points, 3); SIZE sizeWindow={nBakWidth,nBakHeight}; POINT ptSrc={0,0}; UpdateLayeredWindow( hWnd,hdcTemp,&ptWinPos,&sizeWindow,hdcMemory,&ptSrc,0,&Blend,2); graph.ReleaseHDC(hdcMemory); ::ReleaseDC(hWnd,hdcTemp); hdcTemp=NULL; DeleteObject(hBitMap); DeleteDC(hdcMemory); DeleteDC(::GetDC(hWnd)); hdcMemory=NULL;} http://www.codeproject.com/KB/dialog/PerfectTranlucentDlg.aspx只使用一个窗体也可以,但不支持ActiveX控件(如WebBrowser Control, Flash Control) UpdateLayeredWindow能显示子控件,你只要将子控件的WM_PAINT所绘制的图像AlphaBlend到目标图层就可以了。 分层窗口(LayeredWindow)系统不再绘制窗口和子控件,只能你自己绘制子控件或者弄两个窗口叠在一起.参考:http://blog.csdn.net/cometnet/article/details/6561912 跪求MFC关于ocx开发问题,在线等! 100送上求如何动态生成IWebBrowser 郁闷!不知道该学什么了!请大家帮我参考一下!谢谢了! ~~~保存BMP的问题!!! DAO 中创建本地文件在操作系统上的问题??!! help!关于换皮肤的功能 没人帮我,我好惨.请指教 请教简单问题,如何将菜单的一个选项隐藏。就是类似cb的将Visible=false的做法!! MFC 还是 SDK ?? 各路大虾,请帮我分析一下一段CStdioFile文件读取的代码 %!%$!#$^!#%^ VC 画图 关于VPN客户端无法在win7系统使用的问题!
我是用它来半透明窗口的,你试试用在控件上行不行。
void SetTransparent(HWND hWnd,UINT nTransparent)
{
BLENDFUNCTION Blend;
HDC hdcMemory;
int nBakWidth , nBakHeight;
Blend.BlendOp=0;
Blend.BlendFlags=0;
Blend.AlphaFormat=1;
Blend.SourceConstantAlpha=nTransparent;
nBakWidth =g_Image->GetWidth();
nBakHeight =g_Image->GetHeight();
HDC hdcTemp=GetDC(hWnd);
hdcMemory=CreateCompatibleDC(hdcTemp);
HBITMAP hBitMap=CreateCompatibleBitmap(hdcTemp,nBakWidth,nBakHeight);
SelectObject(hdcMemory,hBitMap);
RECT rect;
GetWindowRect(hWnd,&rect);
POINT ptWinPos={rect.left,rect.top};
Graphics graph(hdcMemory);
Point points[] = {Point(0, 0), Point(nBakWidth, 0),Point(0, nBakHeight)};
graph.DrawImage(g_Image, points, 3);
SIZE sizeWindow={nBakWidth,nBakHeight};
POINT ptSrc={0,0};
UpdateLayeredWindow( hWnd,hdcTemp,&ptWinPos,&sizeWindow,hdcMemory,&ptSrc,0,&Blend,2);
graph.ReleaseHDC(hdcMemory);
::ReleaseDC(hWnd,hdcTemp);
hdcTemp=NULL;
DeleteObject(hBitMap);
DeleteDC(hdcMemory);
DeleteDC(::GetDC(hWnd));
hdcMemory=NULL;
}
参考:http://blog.csdn.net/cometnet/article/details/6561912