2 * ReactOS W32 Subsystem
3 * Copyright (C) 1998 - 2006 ReactOS Team
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 /* $Id: class.c 21596 2006-04-15 10:41:58Z greatlrd $
21 * COPYRIGHT: See COPYING in the top level directory
22 * PROJECT: ReactOS kernel
23 * PURPOSE: Window classes
24 * FILE: subsys/win32k/ntuser/class.c
25 * PROGRAMER: Thomas Weidenmueller <w3seek@reactos.com>
27 * 06-06-2001 CSH Created
29 /* INCLUDES ******************************************************************/
36 /* CALLPROC ******************************************************************/
39 GetCallProcHandle(IN PCALLPROC CallProc
)
41 /* FIXME - check for 64 bit architectures... */
42 return (WNDPROC
)((ULONG_PTR
)UserObjectToHandle(CallProc
) | 0xFFFF0000);
46 DestroyCallProc(IN PDESKTOP Desktop
,
47 IN OUT PCALLPROC CallProc
)
49 /* FIXME - use new object manager! */
50 HANDLE Handle
= UserObjectToHandle(CallProc
);
52 UserDeleteObject(Handle
,
57 CloneCallProc(IN PDESKTOP Desktop
,
58 IN PCALLPROC CallProc
)
60 PCALLPROC NewCallProc
;
63 /* FIXME - use new object manager! */
64 NewCallProc
= (PCALLPROC
)UserCreateObject(gHandleTable
,
68 if (NewCallProc
!= NULL
)
70 NewCallProc
->hdr
.Handle
= Handle
; /* FIXME: Remove hack */
71 NewCallProc
->pi
= CallProc
->pi
;
72 NewCallProc
->WndProc
= CallProc
->WndProc
;
73 NewCallProc
->Unicode
= CallProc
->Unicode
;
74 NewCallProc
->Next
= NULL
;
81 CreateCallProc(IN PDESKTOP Desktop
,
84 IN PW32PROCESSINFO pi
)
86 PCALLPROC NewCallProc
;
89 /* FIXME - use new object manager! */
90 NewCallProc
= (PCALLPROC
)UserCreateObject(gHandleTable
,
94 if (NewCallProc
!= NULL
)
96 NewCallProc
->hdr
.Handle
= Handle
; /* FIXME: Remove hack */
98 NewCallProc
->WndProc
= WndProc
;
99 NewCallProc
->Unicode
= Unicode
;
100 NewCallProc
->Next
= NULL
;
107 UserGetCallProcInfo(IN HANDLE hCallProc
,
108 OUT PWNDPROC_INFO wpInfo
)
112 /* NOTE: Accessing the WNDPROC_INFO structure may raise an exception! */
114 /* FIXME - use new object manager! */
115 CallProc
= UserGetObject(gHandleTable
,
118 if (CallProc
== NULL
)
123 if (CallProc
->pi
!= GetW32ProcessInfo())
128 wpInfo
->WindowProc
= CallProc
->WndProc
;
129 wpInfo
->IsUnicode
= CallProc
->Unicode
;