我很难理解一件事。
我的计算机运行的是64位Windows,因此

std::cout << sizeof(HANDLE) << std::endl;
std::cout << sizeof(HWND) << std::endl;
std::cout << sizeof(int*) << std::endl;


全部打印8个字节,即8个字节(64位)。

现在,在窗口中

LRESULT __stdcall wndProc(HWND, UINT, WPARAM, LPARAM lParam)


WPARAM和LPARAM的大小(以字节为单位)也为8。
我记得在Petzold的书中读到过,但是有些消息的窗口句柄存储在LPARAM参数的LOWORD或HIWORD中。
例如,

HWND childHandle = (HWND)LOWORD(lParam);


怎么会这样? lParam的HIWORD是32位整数的前两个字节吗?为了将句柄存储在LPARAM中,是否需要全部八个字节?

谢谢!

最佳答案

快速搜索导致this MSDN page指出此方法已在16位应用程序中使用,并在转移到32位体系结构后进行了更改:

You extract the remaining two values in this way in the 16-bit framework:
HWND hWndCtrl = (HWND)LOWORD(lParam); //Control handle
int nCode = HIWORD(lParam);           //Notification code

You extract them this way in the 32-bit framework:
HWND hWndCtrl = (HWND)lParam;              //Control handle
int nCode = HIWORD(wParam);                //Notification code

关于c++ - Win32 API-将LO/HIWORD转换为HANDLE,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28153123/

10-11 17:03