Implement MDICascade, MDITile and WIN_ListChildren. This will help
Winefile cascade and tile windows. WIN_ListChildren is tmp located here
in mdi.c for now.
Modified: trunk/reactos/lib/user32/windows/mdi.c
_____
Modified: trunk/reactos/lib/user32/windows/mdi.c
--- trunk/reactos/lib/user32/windows/mdi.c 2005-07-09 07:50:48 UTC
(rev 16520)
+++ trunk/reactos/lib/user32/windows/mdi.c 2005-07-09 08:54:43 UTC
(rev 16521)
@@ -143,6 +143,47 @@
static LRESULT WINAPI MDIClientWndProcA( HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam );
static LRESULT WINAPI MDIClientWndProcW( HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam );
+
+static
+HWND* WIN_ListChildren (HWND hWndparent)
+{
+
+ DWORD dwCount = 0;
+ HWND* pHwnd = NULL;
+ HANDLE hHeap;
+
+ SetLastError(0);
+
+ dwCount = NtUserBuildHwndList ( NULL, hWndparent, FALSE, 0, 0, NULL,
0 );
+
+ if ( !dwCount || GetLastError() )
+ return FALSE;
+
+ /* allocate buffer to receive HWND handles */
+ hHeap = GetProcessHeap();
+
+ pHwnd = HeapAlloc ( hHeap, 0, sizeof(HWND)*(dwCount+1) );
+ if ( !pHwnd )
+ {
+ SetLastError ( ERROR_NOT_ENOUGH_MEMORY );
+ return FALSE;
+ }
+
+ /* now call kernel again to fill the buffer this time */
+ dwCount = NtUserBuildHwndList (NULL, hWndparent, FALSE, 0, 0, pHwnd,
dwCount );
+
+ if ( !dwCount || GetLastError() )
+ {
+ if ( pHwnd )
+ HeapFree ( hHeap, 0, pHwnd );
+ return FALSE;
+ }
+
+ return pHwnd;
+}
+
+
+
#ifdef __REACTOS__
void WINAPI ScrollChildren(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM
lParam);
void WINAPI CalcChildScroll(HWND hwnd, INT scroll);
@@ -912,19 +953,20 @@
return hbCopy;
}
+
+
+
/**********************************************************************
* MDICascade
*/
static LONG MDICascade( HWND client, MDICLIENTINFO *ci )
{
-#ifdef __REACTOS__
- /* FIXME */
- return 0;
-#else
HWND *win_array;
BOOL has_icons = FALSE;
int i, total;
+DbgPrint("MDICascade\n");
+
if (ci->hwndChildMaximized)
SendMessageA( client, WM_MDIRESTORE,
(WPARAM)ci->hwndChildMaximized, 0);
@@ -968,7 +1010,6 @@
if (has_icons) ArrangeIconicWindows( client );
return 0;
-#endif
}
/**********************************************************************
@@ -976,14 +1017,12 @@
*/
static void MDITile( HWND client, MDICLIENTINFO *ci, WPARAM wParam )
{
-#ifdef __REACTOS__
- /* FIXME */
- return;
-#else
HWND *win_array;
int i, total;
BOOL has_icons = FALSE;
+DbgPrint("MDITile\n");
+
if (ci->hwndChildMaximized)
SendMessageA( client, WM_MDIRESTORE,
(WPARAM)ci->hwndChildMaximized, 0);
@@ -1056,7 +1095,6 @@
}
HeapFree( GetProcessHeap(), 0, win_array );
if (has_icons) ArrangeIconicWindows( client );
-#endif
}
/* ----------------------- Frame window ---------------------------- */