关于UpdateLayeredWindow调用失败返回0但是Getlasterror为0的问题
来源:互联网 发布:java 迭代器 编辑:程序博客网 时间:2024/06/05 17:21
最近,做一个异形半透明的窗体功能,使用的是比较大众化的方法:UpdateLayeredWindow来实现,实现细节是使用一张带有半透明效果的png图片。
在公司的台式机器上功能正常
但是回家再笔记本上发现窗体无法显示,估计是UpdateLayeredWindow函数有问题,发现UpdateLayeredWindow返回值为0,即返回错误,用GetLastError发现错误id也为0(即成功),顿时就很郁闷,于是我对比了一下公司台式机器和笔记本的操作系统版本,一致 均为sp3.然后推测估计是笔记本上关于GDI相关的系统文件不是最新的缘故.
问题就这样折磨了我一上午,于是google,发现有了一种方案成功解决了这个问题:在创建内存hbitmap的时候,一般的方法是使用如下
if(bmpMem.CreateCompatibleBitmap(pDC, m_nWndWidth, m_nWndHeight))
{
dcMem.SelectObject(&bmpMem);
//....
}
我估计可能是我系统文件原因导致在我的机器上这一步出现了问题,导致后面的UpdateLayeredWindow出错,于是改成一下方案:
CBitmap bmpMem;
BITMAPINFOHEADER stBmpInfoHeader = { 0 };
int nBytesPerLine = ((m_nWndWidth* 32 + 31) & (~31)) >> 3;
stBmpInfoHeader.biSize = sizeof(BITMAPINFOHEADER);
stBmpInfoHeader.biWidth = m_nWndWidth;
stBmpInfoHeader.biHeight = m_nWndHeight;
stBmpInfoHeader.biPlanes = 1;
stBmpInfoHeader.biBitCount = 32;
stBmpInfoHeader.biCompression = BI_RGB;
stBmpInfoHeader.biClrUsed = 0;
stBmpInfoHeader.biSizeImage = nBytesPerLine * m_nWndHeight;
PUINT32 pvBits = NULL;
HBITMAP hBitMap = ::CreateDIBSection(NULL, (PBITMAPINFO)&stBmpInfoHeader, DIB_RGB_COLORS, (LPVOID*)&pvBits, NULL, 0);
SelectObject(dcMem.GetSafeHdc(), hBitMap);
成功...
- 关于UpdateLayeredWindow调用失败返回0但是Getlasterror为0的问题
- UpdateLayeredWindow()失败,GetLastError()返回0
- GDI+ / PNG 实现半透明窗口,正常情况下没有问题 将系统设置为16位色后UpdateLayeredWindow函数失败,GetLastError返回8(ERROR_NOT_ENOUGH_MEMORY)
- WIN7上UpdateLayeredWindow执行失败,getlasterror返回307的问题解决方法
- CreateFileMapping调用失败,GetLastError返回值为1006
- OpenProcess调用失败,GetLastError返回5
- CreateWindowEx返回句柄为0, GetLastError却返回0
- LoadLibrary失败,getlasterror返回126的心得
- 关于Jdbc调用存储过程得到返回值为0(null)的问题
- win32 API LoadImage()错误:返回值为0,GetLastError提示错误为“系统找不到指定的文件”
- Creat 失败,getlasterror返回10093
- socket返回SOCKET_ERROR但是errno为0
- CreateCompatibleBitmap返回NULL,GetLastError却返回0
- CreateBitmapIndirect() GetLastError() 返回 错误的参数 创建失败原因
- dll之loadbitmap失败 getlasterror返回1813 1814的解决
- GetLastError返回错误代码对应的意思0-3099
- GetLastError返回值的意义(0~999)
- 关于VS2005 调用WebService返回发送请求数据失败问题
- Turbo C移动,删除,和复制
- 详细的汉诺塔
- Ext JS 4.1.1 RC2发布
- fedora 安装 rar
- X窗口系统原理粗解
- 关于UpdateLayeredWindow调用失败返回0但是Getlasterror为0的问题
- 图
- 日期控件中添加关闭按钮
- Eclipse常用设置和常用快捷方式
- 【数据结构】堆的应用
- Git 版本管理工具(一)
- Git 常用命令详解(二)
- poj1405 Heritage(贪心)
- protel dxp PCB使用技巧(摘)