我很难理解一件事。
我的计算机运行的是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/