From 5cccc4e33815f666cf2910f9dcfe739e981f8bb4 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Wed, 28 May 2008 02:36:25 +0000 Subject: [PATCH] NtUserSetWindowFNID is needed for supporting NtUserGetClassName bGetRealClass. svn path=/trunk/; revision=33733 --- reactos/include/reactos/win32k/ntuser.h | 33 ++++++++++++++-- .../subsystems/win32/win32k/ntuser/window.c | 38 +++++++++++++++---- 2 files changed, 61 insertions(+), 10 deletions(-) diff --git a/reactos/include/reactos/win32k/ntuser.h b/reactos/include/reactos/win32k/ntuser.h index e1e4b430ecc..988ead4c92e 100644 --- a/reactos/include/reactos/win32k/ntuser.h +++ b/reactos/include/reactos/win32k/ntuser.h @@ -77,6 +77,7 @@ typedef struct _WINDOWCLASS INT ClsExtra; INT WndExtra; PVOID Dce; + DWORD fnID; HINSTANCE hInstance; HANDLE hIcon; /* FIXME - Use pointer! */ HANDLE hIconSm; /* FIXME - Use pointer! */ @@ -264,6 +265,32 @@ typedef struct _W32CLIENTINFO PW32THREADINFO GetW32ThreadInfo(VOID); PW32PROCESSINFO GetW32ProcessInfo(VOID); +// FNID's for NtUserSetWindowFNID +#define FNID_BUTTON 0x02A1 +#define FNID_COMBOBOX 0x02A2 +#define FNID_COMBOLBOX 0x02A3 +#define FNID_DIALOG 0x02A4 +#define FNID_EDIT 0x02A5 +#define FNID_LISTBOX 0x02A6 +#define FNID_MDICLIENT 0x02A7 +#define FNID_STATIC 0x02A8 +#define FNID_IME 0x02A9 + +#define FNID_DESTROY 0x4000 // This is sent when WM_NCDESTROY or in the support routine. + // Seen during WM_CREATE on error exit too. + +// ICLS's for NtUserGetClassName FNID to ICLS +#define ICLS_BUTTON 0 +#define ICLS_EDIT 1 +#define ICLS_STATIC 2 +#define ICLS_LISTBOX 3 +#define ICLS_COMBOBOX 5 +#define ICLS_MDICLIENT 6 +#define ICLS_COMBOLBOX 7 +#define ICLS_IME 15 +#define ICLS_DIALOG 17 +#define ICLS_END 31 + DWORD NTAPI NtUserAssociateInputContext( @@ -2186,11 +2213,11 @@ NtUserSetTimer TIMERPROC lpTimerFunc ); -DWORD +BOOL NTAPI NtUserSetWindowFNID( - DWORD Unknown0, - DWORD Unknown1); + HWND hWnd, + WORD fnID); LONG NTAPI diff --git a/reactos/subsystems/win32/win32k/ntuser/window.c b/reactos/subsystems/win32/win32k/ntuser/window.c index 4b6d1df1251..c249571d486 100644 --- a/reactos/subsystems/win32/win32k/ntuser/window.c +++ b/reactos/subsystems/win32/win32k/ntuser/window.c @@ -4159,19 +4159,43 @@ CLEANUP: /* - * @unimplemented + * @implemented */ -DWORD STDCALL -NtUserSetWindowFNID(DWORD Unknown0, - DWORD Unknown1) +BOOL STDCALL +NtUserSetWindowFNID(HWND hWnd, + WORD fnID) { - UNIMPLEMENTED + PWINDOW_OBJECT Window; + PWINDOW Wnd; + DECLARE_RETURN(BOOL); - return 0; + DPRINT("Enter NtUserSetWindowFNID\n"); + UserEnterExclusive(); + + if (!(Window = UserGetWindowObject(hWnd))) + { + RETURN( FALSE); + } + Wnd = Window->Wnd; + + if (Wnd->Class) + { // From user land we only set these. + if ((fnID != FNID_DESTROY) || ((fnID < FNID_BUTTON) && (fnID > FNID_IME)) ) + { + RETURN( FALSE); + } + else + Wnd->Class->fnID |= fnID; + } + RETURN( TRUE); + +CLEANUP: + DPRINT("Leave NtUserSetWindowFNID\n"); + UserLeave(); + END_CLEANUP; } - /* * @implemented */