我有六个窗口,它们都可以生成一个对话框。对话框需要知道它是由六个窗口中的哪一个生成的。我相信我应该能够从对话框中调用 GetParent(hWnd) 或 GetWindow(hWnd, GW_OWNER) ,但这两个调用都返回整个项目窗口,而不是我传递到 DialogBox() 中的第三个参数。
下面是生成对话框的代码(所有六个窗口共享相同的 wndproc 函数),以及一些 printf 调试:
case ID_SETTINGS_BUTTON:
OutputDebugStringA("hWnd from Caller to DialogBox: ");
char buffer[128];
GetClassNameA(hWnd, buffer, 128);
OutputDebugStringA(buffer);
OutputDebugStringA("\n");
DialogBox(hInst, MAKEINTRESOURCE(IDD_PORTSETTINGS), hWnd, portSettingsProc);
break;
Run Code Online (Sandbox Code Playgroud)
这是对话框过程开头的代码:
INT_PTR CALLBACK portSettingsProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message) {
case WM_INITDIALOG:
for (int k = 0; k < PaneInfo::BAUDRATE_I_COUNT; k++)
SendDlgItemMessage(hWnd, IDC_PORTSETTINGS_BAUDRATE, CB_ADDSTRING, 0, (LPARAM)PaneInfo::BAUDRATE_NAME_ARR[k]);
for (int k = 0; k < PaneInfo::DATABITS_I_COUNT; k++)
SendDlgItemMessage(hWnd, IDC_PORTSETTINGS_DATABITS, CB_ADDSTRING, 0, (LPARAM)PaneInfo::DATABITS_NAME_ARR[k]);
for (int …Run Code Online (Sandbox Code Playgroud)