使用UpdateLayeredWindow创建异形窗口所遇到的奇怪问题

Starmean 2010-03-11 04:22:52
以前写过一个小程序,其中使用UpdateLayeredWindow函数创建了异形窗口,当时运行一切正常,可是最近发现它不显示了,不知道什么原因。后来从网上下载了源码(一个蝴蝶小钟的那个),运行结果也是无法正常显示。其中不提示任何错误,运行正常。
主要代码如下:

RECT rc;
GetWindowRect(&rc);
const int nWidth = rc.right - rc.left;
const int nHeight = rc.bottom - rc.top;

CDC* pDC = GetDC();
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CBitmap bmp;
bmp.CreateCompatibleBitmap(&memDC, nWidth, nHeight);
CBitmap *pOldBmp = memDC.SelectObject(&bmp);

Graphics graph(memDC.m_hDC);
Image img(L"e:\\a.png");
graph.DrawImage(&img, 0, 0, nWidth, nHeight);

BLENDFUNCTION blend;
blend.BlendOp = 0;
blend.BlendFlags = 0;
blend.AlphaFormat = 1;
blend.SourceConstantAlpha = 255;
POINT ptWinPos = {rc.left, rc.top};
SIZE sizeWindow = {nWidth, nHeight};
POINT ptSrc = {0,0};

DWORD dwExStyle = GetWindowLong(m_hWnd, GWL_EXSTYLE);
if((dwExStyle&0x80000) != 0x80000) SetWindowLong(m_hWnd, GWL_EXSTYLE, dwExStyle^0x80000);
BOOL bRet = UpdateLayeredWindow(m_hWnd, pDC->m_hDC, &ptWinPos, &sizeWindow, memDC.m_hDC, &ptSrc, 0, &blend, 2);

graph.ReleaseHDC(memDC.m_hDC);
memDC.SelectObject(pOldBmp);
memDC.DeleteDC();
bmp.DeleteObject();
ReleaseDC(pDC);



现在我自己摸索了一下,已经可以显示了,但中间添加了很多代码,降低了很多效率。我就不明白,这些代码以前都正常的很,为什么现在不行了?
...全文
313 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gavin18 2010-08-16
  • 打赏
  • 举报
回复
遇到同样的问题
Starmean 2010-03-12
  • 打赏
  • 举报
回复
在色深32位下,兼容位图是最简单的,也是可以的
我上面提到过,现在自己已经可以让它显示了,就是添加了创建32位位图的代码,只是感觉这样效率可能会下降。
问题就是出在不知道什么时候,电脑被改成16位色了,我根本就没想起来,这个函数在16位色下无法正常执行,谢楼上的提醒。
flyhigh 2010-03-11
  • 打赏
  • 举报
回复
应该是你的机器显示色深不是32位。调一下显示就好了。
创建位图的时候应该创建32位位图,而不应该是兼容位图。
源码直接下载地址: https://pan.quark.cn/s/a4b39357ea24 平台简介 License Spring Boot JDK-17 本项目基于ruoyi-vue-fast实现 项目代码、文档 均开源免费可商用 遵循开源协议在项目中保留开源协议文件即可 活到老写到老 为兴趣而开源 为学习而开源 为让大家真正可以学到技术而开源 若依wms是一套基于若依的wms仓库管理系统,支持lodop和网页打印入库单、出库单。 毫无保留给个人及企业免费使用。 前端采用Vue、Element UI。 后端采用Spring Boot、Spring Security、Redis & Jwt。 权限认证使用Jwt,支持多终端认证系统。 支持加载动态权限菜单,多方式轻松权限控制。 高效率开发,使用代码生成器可以一键生成前后端代码。 前端项目地址 gitee https://gitee.com/zccbbg/ruo-yi-wms-vue https://.com/zccbbg/RuoYi-WMS-VUE 若依实战技术专栏 关注文末公众号回复:星球 在线体验 https://wms.ichengle.top/ 不同分支介绍 jdk17+vue3,支持多仓库,没有库区概念,操作简单,覆盖大部分库存应用场景。 jdk17+vue3,支持多仓库、多库区,记录生产日期、过期日期、sn,可适配一物一码,操作相对复杂。 jdk8+vue2 同步lite分支 若依wms功能 首页:库存预警与到期提醒、基础数据报表展示 仓库/库区:管理维护仓库基础数据 物料:管理维护物料基础数据 客户/供应商:管理维护联系人基础数据 入库:创建入库单后包括如下几个状态:暂存、作废、完成入库,入库类型包括:采购...

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧