Windows sends WM_GETDLGCODE only in response to keyboard messages (WM_KEYDOWN, WM_CHAR, WM_SYSCHAR).
diff --git a/windows/dialog.c b/windows/dialog.c index 23f2560..fdf3c28 100644 --- a/windows/dialog.c +++ b/windows/dialog.c
@@ -1334,12 +1334,17 @@ { LPMSG16 msg = PTR_SEG_TO_LIN(msg16); BOOL ret, translate, dispatch; - INT dlgCode; + INT dlgCode = 0; if ((hwndDlg != msg->hwnd) && !IsChild16( hwndDlg, msg->hwnd )) return FALSE; - dlgCode = SendMessage16( msg->hwnd, WM_GETDLGCODE, 0, (LPARAM)msg16); + if ((msg->message == WM_KEYDOWN) || + (msg->message == WM_SYSCHAR) || + (msg->message == WM_CHAR)) + { + dlgCode = SendMessage16( msg->hwnd, WM_GETDLGCODE, 0, (LPARAM)msg16); + } ret = DIALOG_IsDialogMessage( msg->hwnd, hwndDlg, msg->message, msg->wParam, msg->lParam, &translate, &dispatch, dlgCode ); @@ -1366,12 +1371,17 @@ BOOL WINAPI IsDialogMessageA( HWND hwndDlg, LPMSG msg ) { BOOL ret, translate, dispatch; - INT dlgCode; + INT dlgCode = 0; if ((hwndDlg != msg->hwnd) && !IsChild( hwndDlg, msg->hwnd )) return FALSE; - dlgCode = SendMessageA( msg->hwnd, WM_GETDLGCODE, 0, (LPARAM)msg); + if ((msg->message == WM_KEYDOWN) || + (msg->message == WM_SYSCHAR) || + (msg->message == WM_CHAR)) + { + dlgCode = SendMessageA( msg->hwnd, WM_GETDLGCODE, 0, (LPARAM)msg); + } ret = DIALOG_IsDialogMessage( msg->hwnd, hwndDlg, msg->message, msg->wParam, msg->lParam, &translate, &dispatch, dlgCode ); @@ -1387,12 +1397,17 @@ BOOL WINAPI IsDialogMessageW( HWND hwndDlg, LPMSG msg ) { BOOL ret, translate, dispatch; - INT dlgCode; + INT dlgCode = 0; if ((hwndDlg != msg->hwnd) && !IsChild( hwndDlg, msg->hwnd )) return FALSE; - dlgCode = SendMessageW( msg->hwnd, WM_GETDLGCODE, 0, (LPARAM)msg); + if ((msg->message == WM_KEYDOWN) || + (msg->message == WM_SYSCHAR) || + (msg->message == WM_CHAR)) + { + dlgCode = SendMessageW( msg->hwnd, WM_GETDLGCODE, 0, (LPARAM)msg); + } ret = DIALOG_IsDialogMessage( msg->hwnd, hwndDlg, msg->message, msg->wParam, msg->lParam, &translate, &dispatch, dlgCode );