我已经尝试对此进行研究,但我仍然很困惑。我真的不想使用全局变量,但即使在 msdn 站点上,他们也说“将其设置为全局变量以从对话框回调中访问它”。有什么办法可以在堆上创建内存并将指针传递给新创建的对话框吗?我希望对话框能够更改通过指针访问的数据。
最佳答案
如果您使用的是 DialogBoxParam
你可以在 dwInitParam
中传递指针:
DialogBoxParam(hInstance,
MAKEINTRESOURCE(IDD_DIALOG),
hwndParent,
YourDialogFunc,
dwInitParam);
然后您将从对话回调中访问数据:
INT_PTR CALLBACK YourDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch(uMsg) [
case WM_INITDIALOG:
// the lParam parameter will contain the data sent through the dwInitParam
return 1;
break;
}
return 0;
}
如果您使用 CreateWindowEx
你会通过 lpCreateParams
向你发送数据在CREATESTRUCT
通过 lpParam
发送参数。
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch(uMsg) [
case WM_CREATE:
{
CREATESTRUCT *pCreate = reinterpret_cast<CREATESTRUCT*>(lParam);
int* userdata = reinterpret_cast<int*>(pCreate->lpCreateParams);
// store the pointer in the instance data of the window
// so it could always be retrieved by using GetWindowLongPtr(hwnd, GWLP_USERDATA)
SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)userdata);
}
break;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
关于c++ - (Winapi C++) 如何在没有全局变量的情况下将数据从一个窗口传递到另一个窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19761167/