首页 > 解决方案 > Loadbitmap 在 x86 上编译和运行良好,但在编译为 x64 时无法正常工作

问题描述

我是 C++ 新手。这是我从 WIN32 API 书中改编的代码。只有在调试中的 x86 模式打开时,它才能按需要工作。当有 x64 时,它正在编译但不工作。我试图将 GWL_HINSTANCE 更改为 GWLP_HINSTANCE 没有结果。

hBmpBkgr = LoadBitmapW((HINSTANCE)GetWindowLongW(hWnd, GWLP_HINSTANCE), MAKEINTRESOURCEW(IDB_STONE));
hBkBrush = CreatePatternBrush(hBmpBkgr);
SetClassLongW(hWnd, GCLP_HBRBACKGROUND, (LONG)hBkBrush);

hBmpBall = LoadBitmapW((HINSTANCE)GetWindowLongW(hWnd, GWLP_HINSTANCE), MAKEINTRESOURCEW(IDB_BALL));
GetObjectW(hBmpBall, sizeof(bm), (LPSTR)&bm);

hMemDcFrame = CreateCompatibleDC(hdc);
hBmpFrame = CreateCompatibleBitmap(hdc, rect.right, rect.bottom);
SelectObject(hMemDcFrame, hBmpFrame);

SetGraphicsMode(hMemDcFrame, GM_ADVANCED);

标签: winapix86x86-6432bit-64bit

解决方案


SetClassLongW

将指定偏移处的指定 32 位(长)值替换到额外类内存或指定窗口所属类的 WNDCLASSEX 结构中。

注意:此函数已被 SetClassLongPtr 函数取代。要编写与 32 位和 64 位版本的 Windows 兼容的代码,请使用SetClassLongPtr

此外,[LoadBitmap可用于“要求”部分中指定的操作系统。在后续版本中可能会更改或不可用。相反,使用LoadImageDrawFrameControl。]

更多详情请参考:LoadBitmap


推荐阅读