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