Loadbitmap在x86版本编译时运行良好,但在x64版本编译时却无法运行。

问题描述 投票:0回答:1

我是C++新手。这是我从一本WIN32 API书上改编的代码,只有在x86模式下debug开启时才能正常工作。我试着把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个回答
1
投票

SetClassLongW:

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

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

此外,[。LoadBitmap 可用于 "需求 "部分指定的操作系统。在后续版本中,它可能会被更改或不可用。相反,请使用 加载图片DrawFrameControl.]

更多细节请参考。LoadBitmap

© www.soinside.com 2019 - 2024. All rights reserved.