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 );