Win32半透明窗口.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Win32半透明窗口

Win32实现窗口半透明我们都知道,vista底下的窗口都是半透明的,效果非常的漂亮,那么,半透明的效果在我们的win32桌面应用程序中怎么实现呢?其实很简单,就是几个属性设置一下,我们知道,在创建一个窗体的时候会用到一个api:CreateWindow,但是创建半透明效果的窗体仅用CreateWindow是无法办到的,我们必须使用一个加强版的函数:CreateWindowEx();这个函数的参数,就比CreateWindow多一个,就是第一个参数: dwExStyle:指定窗口的扩展风格. 有了这个参数,我们就可以使用更多扩展的风格。要实现半透明窗口,我们需要完成一下两个任务:1、创建一个窗口,必须带有WS_EX_LAYERED风格的。2、调用SetLayeredWindowAttributes函数即可。invoke SetLayeredWindowAttributes,hWnd,NULL,192,LWA_ALPHA其中SetLayeredWindowAttributes第二个参数从0~255是设置透明度的。这里需要注意的是:WS_EX_LAYERED这个样式需要预先定义一下: #define WS_EX_LAYERED 0有就是SetLayeredWindowAttributes也必须从user32.dll文件中引入。具体引入方法如下://这两句应该是定义一个函数类型的指针typedef BOOL (WINAPI *lpfn) (HWND hWnd, COLORREF cr, BYTE bAlpha, DWORD dwFlags);lpfng_pSetLayeredWindowAttributes;// 获取函数SetLayeredWindowAttributes在User32.dll中的指针HMODULE hUser32 = GetModuleHandle(USER32.DLL);g_pSetLayeredWindowAttributes = (lpfn)GetProcAddress(hUser32, SetLayeredWindowAttributes);(*g_pSetLayeredWindowAttributes)(hwnd,RGB(250,0,0),215,2); //这就相当如调用SetLayeredWindowAttributes函数具体的代码如下:#define WS_EX_LAYERED 0wnd=CreateWindowEx(WS_EX_LAYERED,?? lpszClassName,?? lpszTitle,?? WS_CAPTION | WS_SYSMENU ,??????? CW_USEDEFAULT,CW_USEDEFAULT,??????? iWindowWidth,iWindowHeight,??????? NULL,??????? NULL,??????? hInstance,?? NULL);typedef BOOL (WINAPI *lpfn) (HWND hWnd, COLORREF cr, BYTE bAlpha, DWORD dwFlags);lpfng_pSetLayeredWindowAttributes;// 获取函数SetLayeredWindowAttributes在User32.dll中的指针HMODULE hUser32 = GetModuleHandle(USER32.DLL);g_pSetLayeredWindowAttributes = (lpfn)GetProcAddress(hUser32, SetLayeredWindowAttributes);(*g_pSetLayeredWindowAttributes)(hwnd,RGB(250,0,0),215,2);主要用到的api如下:CreateWindowExGetWindowModuleHandleGetProcAddressSetLayeredWindowAttributes?源代码:我是把所有代码都写在 WM_PAIN 里的...你可以把他封装成类或者函数.思想:修改背景图的象素为:与前景图重叠的部分的混合然后显示背景图。看起来就好象前景图透明一样。要用到的变量:PAINTSTRUCT ps;HDC hdc, Oldhdc;HBITMAP bitmap[2];RECT rect;BITMAP bmpBG, bmpFor;case WM_PAINT:?? {??? LPCSTR array[2] = {C.BMP, D.BMP};????? //C为背景 D为前景??? hdc = BeginPaint(hWnd, ps);??? ::GetClientRec

文档评论(0)

2017ll + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档