【问题标题】:Loadbitmap is compiling and working well as x86, but not working when compiling as x64Loadbitmap 在 x86 上编译和运行良好,但在编译为 x64 时无法正常工作
【发布时间】:2020-09-21 16:43:11
【问题描述】:

我是 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);

【问题讨论】:

标签: winapi x86 x86-64 32bit-64bit


【解决方案1】:

SetClassLongW:

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

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

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

更多详情请参考:LoadBitmap

【讨论】:

  • 嗨,@Kidd,这个答案对你有帮助吗?如果确实解决了问题,请随时accept回答。
猜你喜欢
  • 2011-12-03
  • 2019-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-08
  • 2021-05-21
  • 2012-06-15
  • 1970-01-01
相关资源
最近更新 更多