[User32]
authorJames Tabor <james.tabor@reactos.org>
Mon, 24 Oct 2011 14:16:53 +0000 (14:16 +0000)
committerJames Tabor <james.tabor@reactos.org>
Mon, 24 Oct 2011 14:16:53 +0000 (14:16 +0000)
- Use SetWindowTextA/W so that it passes through defwnd to be processed for themes.
- Fix validation of the dialog window and procedure.

svn path=/trunk/; revision=54248

reactos/dll/win32/user32/windows/dialog.c

index e6c3679..01b69bd 100644 (file)
@@ -138,27 +138,34 @@ DIALOGINFO * DIALOG_get_info( HWND hWnd, BOOL create )
     PWND pWindow;
     DIALOGINFO* dlgInfo = (DIALOGINFO *)GetWindowLongPtrW( hWnd, DWLP_ROS_DIALOGINFO );
 
-    if(!dlgInfo && create)
+    pWindow = ValidateHwnd( hWnd );
+    if (!pWindow)
     {
-        pWindow = ValidateHwnd( hWnd );
-        if (!pWindow)
-        {
-           SetLastError( ERROR_INVALID_WINDOW_HANDLE );
-           return NULL;
-        }
+       return NULL;
+    }
 
-        if (pWindow && pWindow->cbwndExtra >= DLGWINDOWEXTRA && hWnd != GetDesktopWindow())
-        {
-            if (!(dlgInfo = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*dlgInfo) )))
-                return NULL;
+    if (!dlgInfo && create)
+    {
+       if (pWindow && pWindow->cbwndExtra >= DLGWINDOWEXTRA && hWnd != GetDesktopWindow())
+       {
+           if (!(dlgInfo = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*dlgInfo) )))
+              return NULL;
 
-            SETDLGINFO( hWnd, dlgInfo );
+           SETDLGINFO( hWnd, dlgInfo );
 
-            NtUserxSetDialogPointer( hWnd, dlgInfo );
-        }
-        else
+           NtUserxSetDialogPointer( hWnd, dlgInfo );
+       }
+       else
+       {
+           return NULL;
+       }
+    }
+    else
+    {
+        if (!(pWindow->state & WNDS_DIALOGWINDOW) || pWindow->fnid != FNID_DIALOG)
         {
-            return NULL;
+           ERR("Wrong window class for Dialog!\n");
+           return NULL;
         }
     }
     return dlgInfo;
@@ -2573,6 +2580,7 @@ SendDlgItemMessageA(
   WPARAM wParam,
   LPARAM lParam)
 {
+  if ( hDlg == HWND_TOPMOST || hDlg == HWND_BROADCAST ) return 0; // ReactOS
        HWND hwndCtrl = GetDlgItem( hDlg, nIDDlgItem );
        if (hwndCtrl) return SendMessageA( hwndCtrl, Msg, wParam, lParam );
        else return 0;
@@ -2591,6 +2599,7 @@ SendDlgItemMessageW(
   WPARAM wParam,
   LPARAM lParam)
 {
+  if ( hDlg == HWND_TOPMOST || hDlg == HWND_BROADCAST ) return 0; // ReactOS
        HWND hwndCtrl = GetDlgItem( hDlg, nIDDlgItem );
        if (hwndCtrl) return SendMessageW( hwndCtrl, Msg, wParam, lParam );
        else return 0;
@@ -2627,7 +2636,9 @@ SetDlgItemTextA(
   int nIDDlgItem,
   LPCSTR lpString)
 {
-  return SendDlgItemMessageA( hDlg, nIDDlgItem, WM_SETTEXT, 0, (LPARAM)lpString );
+  HWND hwndCtrl = GetDlgItem( hDlg, nIDDlgItem ); // ReactOS Themes
+  if (hwndCtrl) return SetWindowTextA( hwndCtrl, lpString );
+  return FALSE;
 }
 
 
@@ -2641,7 +2652,9 @@ SetDlgItemTextW(
   int nIDDlgItem,
   LPCWSTR lpString)
 {
-  return SendDlgItemMessageW( hDlg, nIDDlgItem, WM_SETTEXT, 0, (LPARAM)lpString );
+  HWND hwndCtrl = GetDlgItem( hDlg, nIDDlgItem ); // ReactOS Themes
+  if (hwndCtrl) return SetWindowTextW( hwndCtrl, lpString );
+  return FALSE;
 }