c++ - Windows 7 GetLastError 87 中的 UpdateLayeredWindow 失败
问题描述
窗口创建代码:
LPCTSTR lpszClassName = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, AfxGetApp()->LoadStandardCursor(IDC_ARROW),
(HBRUSH)GetStockObject(TRANSPARENT), NULL);
if(PngID)
GdiplusHelper::LoadImageFromResource(m_bkImage, PngID, _T("PNG"));
if(HoverPngID)
GdiplusHelper::LoadImageFromResource(m_hoverImage, HoverPngID, _T("PNG"));
m_Width = m_bkImage.GetWidth();
m_Height = m_bkImage.GetHeight();
BOOL ret = CWnd::Create(lpszClassName, NULL, WS_OVERLAPPED | WS_VISIBLE, CRect(x, y, x + m_Width, y + m_Height), pParentWnd, nID);
ADD_EX_STYLE(GetSafeHwnd(), WS_EX_LAYERED);
绘制代码:
BLENDFUNCTION pb_ = { 0 };
pb_.AlphaFormat = AC_SRC_ALPHA;
pb_.BlendOp = AC_SRC_OVER;
pb_.BlendFlags = 0;
pb_.SourceConstantAlpha = 255;
HDC dc = ::GetDC(GetSafeHwnd());
HDC mem_dc_ = CreateCompatibleDC(dc);
HBITMAP hBitmap = CreateCompatibleBitmap(dc, m_Width, m_Height);
CPoint pt_(0, 0);
CSize size_(m_Width, m_Height);
::SelectObject(mem_dc_, hBitmap);
if (!m_bkImage.IsNull())
m_bkImage.Draw(mem_dc_, 0, 0, m_Width, m_Height);
if (m_isHover)
{
if (!m_hoverImage.IsNull())
m_hoverImage.Draw(mem_dc_, 0, 0, m_Width, m_Height);
}
if (!::UpdateLayeredWindow(GetSafeHwnd(), dc, nullptr, &size_, mem_dc_, &pt_, 0, &pb_, ULW_ALPHA))
{
LOGE("UpdateLayeredWindow err:" << (int)GetLastError() );
//BitBlt(dc, 0, 0, m_Width, m_Height, mem_dc_, 0, 0, SRCCOPY);
goto cleanup;
}
cleanup:
if(mem_dc_)
DeleteDC(mem_dc_);
if(hBitmap)
DeleteObject(hBitmap);
if(dc)
DeleteDC(dc);
Win10下显示正常:
但是在Win7中,我得到GetLastError()=87
:
问题是该函数UpdateLayeredWindow()
在Win7下不起作用,但我不知道为什么,我认为我没有使用错误的参数。
有谁知道发生这种情况的原因?
解决方案
推荐阅读
- python - Keras softmax 输出和精度
- node.js - TypeError [ERR_INVALID_ARG_TYPE]:“原始”参数必须是函数类型。收到未定义
- docker - docker如何将docker compose文件中的卷名映射到系统上的卷
- json-patch - Json Patch:追加多个?
- python - Windows 10:PIL.Image.open(abc).load(xyz) 触发 OSError:无法在路径上找到 Ghostscript
- python - 数据组的 Python featuretools 差异
- python - 无法使用命令提示符安装 sklearn 库
- javascript - 如何使用下拉菜单调用 jQuery 函数,以便下拉菜单的 onChange 刷新 div,而不仅仅是将函数结果添加到其中?
- python - 将列从一个 pandas DataFrame 映射到另一个
- python - Scrapy 未在终端显示产量结果