0e6b4d6ac4ca6783e3340ba8d03c9e9ab60f2b14
[reactos.git] / reactos / subsystems / win32 / win32k / include / window.h
1 #ifndef _WIN32K_WINDOW_H
2 #define _WIN32K_WINDOW_H
3
4 struct _PROPERTY;
5 struct _WINDOW_OBJECT;
6 typedef struct _WINDOW_OBJECT *PWINDOW_OBJECT;
7
8 #include <include/object.h>
9 #include <include/class.h>
10 #include <include/msgqueue.h>
11 #include <include/winsta.h>
12 #include <include/dce.h>
13 #include <include/prop.h>
14 #include <include/scroll.h>
15
16 extern ATOM AtomMessage;
17
18 BOOL FASTCALL UserUpdateUiState(PWND Wnd, WPARAM wParam);
19
20 typedef struct _WINDOW_OBJECT
21 {
22 /* NOTE: Do *NOT* Move this pointer anywhere in this structure! This
23 is a pointer to the WINDOW structure that eventually replaces
24 the WINDOW_OBJECT structure! USER32 expects this pointer to
25 be here until WINDOW_OBJECT has completely been superseded! */
26 PWND Wnd;
27
28 /* Pointer to the thread information */
29 PTHREADINFO pti; // Use Wnd->head.pti
30 /* system menu handle. */
31 HMENU SystemMenu;
32 /* Entry in the thread's list of windows. */
33 LIST_ENTRY ListEntry;
34 /* Handle for the window. */
35 HWND hSelf;
36 /* Window flags. */
37 ULONG state;
38 /* Handle of region of the window to be updated. */
39 HANDLE UpdateRegion;
40 /* Handle of the window region. */
41 HANDLE WindowRegion;
42 /* Pointer to the owning thread's message queue. */
43 PUSER_MESSAGE_QUEUE MessageQueue;
44 struct _WINDOW_OBJECT* spwndChild;
45 struct _WINDOW_OBJECT* spwndNext;
46 struct _WINDOW_OBJECT* spwndPrev;
47 /* Entry in the list of thread windows. */
48 LIST_ENTRY ThreadListEntry;
49 /* Handle to the parent window. */
50 struct _WINDOW_OBJECT* spwndParent;
51 /* Handle to the owner window. */
52 HWND hOwner; // Use spwndOwner
53 /* DC Entries (DCE) */
54 PDCE Dce;
55 /* Scrollbar info */
56 PWINDOW_SCROLLINFO Scroll;
57 PETHREAD OwnerThread; // Use Wnd->head.pti
58 HWND hWndLastPopup; /* handle to last active popup window (wine doesn't use pointer, for unk. reason)*/
59 /* counter for tiled child windows */
60 ULONG TiledCounter;
61 /* WNDOBJ list */
62 LIST_ENTRY WndObjListHead;
63 } WINDOW_OBJECT; /* PWINDOW_OBJECT already declared at top of file */
64
65 /* Window flags. */
66 #define WINDOWOBJECT_NEED_SIZE WNDS_SENDSIZEMOVEMSGS
67 #define WINDOWOBJECT_NEED_ERASEBKGND WNDS_ERASEBACKGROUND
68 #define WINDOWOBJECT_NEED_NCPAINT WNDS_SENDNCPAINT
69 #define WINDOWOBJECT_NEED_INTERNALPAINT WNDS_INTERNALPAINT
70 #define WINDOWOBJECT_RESTOREMAX (0x00000020) // Set/Clr WS_MAXIMIZE && Clr/Set WS_EX2_VERTICALLYMAXIMIZEDLEFT/RIGHT
71
72 #define WINDOWSTATUS_DESTROYING WNDS2_INDESTROY
73 #define WINDOWSTATUS_DESTROYED WNDS_DESTROYED
74
75 #define HAS_DLGFRAME(Style, ExStyle) \
76 (((ExStyle) & WS_EX_DLGMODALFRAME) || \
77 (((Style) & WS_DLGFRAME) && (!((Style) & WS_THICKFRAME))))
78
79 #define HAS_THICKFRAME(Style, ExStyle) \
80 (((Style) & WS_THICKFRAME) && \
81 (!(((Style) & (WS_DLGFRAME | WS_BORDER)) == WS_DLGFRAME)))
82
83 #define HAS_THINFRAME(Style, ExStyle) \
84 (((Style) & WS_BORDER) || (!((Style) & (WS_CHILD | WS_POPUP))))
85
86 #define IntIsDesktopWindow(WndObj) \
87 (WndObj->spwndParent == NULL)
88
89 #define IntIsBroadcastHwnd(hWnd) \
90 (hWnd == HWND_BROADCAST || hWnd == HWND_TOPMOST)
91
92
93 #define IntWndBelongsToThread(WndObj, W32Thread) \
94 (((WndObj->OwnerThread && WndObj->OwnerThread->Tcb.Win32Thread)) && \
95 (WndObj->OwnerThread->Tcb.Win32Thread == W32Thread))
96
97 #define IntGetWndThreadId(WndObj) \
98 WndObj->OwnerThread->Cid.UniqueThread
99
100 #define IntGetWndProcessId(WndObj) \
101 WndObj->OwnerThread->ThreadsProcess->UniqueProcessId
102
103
104 BOOL FASTCALL
105 IntIsWindow(HWND hWnd);
106
107 HWND* FASTCALL
108 IntWinListChildren(PWINDOW_OBJECT Window);
109
110 NTSTATUS FASTCALL
111 InitWindowImpl (VOID);
112
113 NTSTATUS FASTCALL
114 CleanupWindowImpl (VOID);
115
116 VOID FASTCALL
117 IntGetClientRect (PWINDOW_OBJECT WindowObject, RECTL *Rect);
118
119 HWND FASTCALL
120 IntGetActiveWindow (VOID);
121
122 BOOL FASTCALL
123 IntIsWindowVisible (PWINDOW_OBJECT Window);
124
125 BOOL FASTCALL
126 IntIsChildWindow (PWINDOW_OBJECT Parent, PWINDOW_OBJECT Child);
127
128 VOID FASTCALL
129 IntUnlinkWindow(PWINDOW_OBJECT Wnd);
130
131 VOID FASTCALL
132 IntLinkWindow(PWINDOW_OBJECT Wnd, PWINDOW_OBJECT WndParent, PWINDOW_OBJECT WndPrevSibling);
133
134 PWINDOW_OBJECT FASTCALL
135 IntGetAncestor(PWINDOW_OBJECT Wnd, UINT Type);
136
137 PWINDOW_OBJECT FASTCALL
138 IntGetParent(PWINDOW_OBJECT Wnd);
139
140 PWINDOW_OBJECT FASTCALL
141 IntGetOwner(PWINDOW_OBJECT Wnd);
142
143
144 INT FASTCALL
145 IntGetWindowRgn(PWINDOW_OBJECT Window, HRGN hRgn);
146
147 INT FASTCALL
148 IntGetWindowRgnBox(PWINDOW_OBJECT Window, RECTL *Rect);
149
150 BOOL FASTCALL
151 IntGetWindowInfo(PWINDOW_OBJECT WindowObject, PWINDOWINFO pwi);
152
153 VOID FASTCALL
154 IntGetWindowBorderMeasures(PWINDOW_OBJECT WindowObject, UINT *cx, UINT *cy);
155
156 BOOL FASTCALL
157 IntAnyPopup(VOID);
158
159 BOOL FASTCALL
160 IntIsWindowInDestroy(PWINDOW_OBJECT Window);
161
162 BOOL FASTCALL
163 IntShowOwnedPopups( PWINDOW_OBJECT owner, BOOL fShow );
164
165 LRESULT FASTCALL
166 IntDefWindowProc( PWINDOW_OBJECT Window, UINT Msg, WPARAM wParam, LPARAM lParam, BOOL Ansi);
167
168 VOID FASTCALL IntNotifyWinEvent(DWORD, PWND, LONG, LONG);
169
170 PWND APIENTRY co_IntCreateWindowEx(DWORD,PUNICODE_STRING,PUNICODE_STRING,DWORD,LONG,LONG,LONG,LONG,HWND,HMENU,HINSTANCE,LPVOID,DWORD,BOOL);
171 WNDPROC FASTCALL IntGetWindowProc(PWND,BOOL);
172
173 #endif /* _WIN32K_WINDOW_H */
174
175 /* EOF */