我被困住了。我有一个结构矢量,其中一个成员是HWND
。我使用这些HWND来处理消息,其他成员是特定于实例的参数。我使用lpParam
将指向每个新创建的结构实例的指针传递给WndProc。听起来不错。
在Proc中,我试图获取传递的指针并将所有特定于实例的变量绑定到它指向的结构。这似乎是标准的方式:
HexParams Hex;
if (uMsg == WM_NCCREATE) {
SetWindowLongPtr(hDlg, GWLP_USERDATA, (LONG_PTR) ((CREATESTRUCT *)lParam)->lpCreateParams);
return TRUE;
} else {
LONG_PTR lpUserData = GetWindowLongPtr(hDlg, GWLP_USERDATA);
Hex = *(HexParams *)lpUserData;
}
switch (uMsg) {
case WM_CREATE: {
// use "Hex.Member"
这样做是为了让我以某种方式调整对话框的大小,并且我正在处理WM_GETMINMAXINFO
。在其中,我已经使用了一个名为Hex
的{{1}}结构成员。
Running
然后在case WM_GETMINMAXINFO: {
MINMAXINFO *pInfo = (MINMAXINFO *) lParam;
// Manual adjust to account for cell parameters
pInfo->ptMinTrackSize.y = Hex.CellHeight * 2 + ClientTopGap;
if (Hex.Running) {
pInfo->ptMinTrackSize.x = TextArea.left + ClientXGap;
pInfo->ptMaxTrackSize.x = TextArea.right + ClientXGap;
}
return 0;
break;
}
中使用它,以弄清楚如何调整它的大小和时间。
我处于一个恶性循环中:在WM_CREATE
到达之前,我无法从lpParam
中获取正确的结构指针,但它不是第一个消息到达!而实际上首先到达的那个我已经需要了scruct。在第一条消息中,它无法获得它!