* Reorganize the whole ReactOS codebase into a new layout. Discussing it will only...
[reactos.git] / reactos / win32ss / user / ntuser / dce.h
diff --git a/reactos/win32ss/user/ntuser/dce.h b/reactos/win32ss/user/ntuser/dce.h
new file mode 100644 (file)
index 0000000..9d56ffd
--- /dev/null
@@ -0,0 +1,53 @@
+#pragma once
+
+/* DC hook codes */
+#define DCHC_INVALIDVISRGN      0x0001
+#define DCHC_DELETEDC           0x0002
+
+#define DCHF_INVALIDATEVISRGN   0x0001
+#define DCHF_VALIDATEVISRGN     0x0002
+
+typedef enum
+{
+    DCE_CACHE_DC,   /* This is a cached DC (allocated by USER) */
+    DCE_CLASS_DC,   /* This is a class DC (style CS_CLASSDC) */
+    DCE_WINDOW_DC   /* This is a window DC (style CS_OWNDC) */
+} DCE_TYPE, *PDCE_TYPE;
+
+typedef struct tagDCE
+{
+    LIST_ENTRY   List;
+    HDC          hDC;
+    HWND         hwndCurrent;
+    PWND         pwndOrg;
+    PWND         pwndClip;
+    PWND         pwndRedirect;
+    HRGN         hrgnClip;
+    HRGN         hrgnClipPublic;
+    HRGN         hrgnSavedVis;
+    DWORD        DCXFlags;
+    PTHREADINFO  ptiOwner;
+    PPROCESSINFO ppiOwner;
+    struct _MONITOR* pMonitor;
+} DCE, *PDCE;
+
+/* internal DCX flags, see psdk/winuser.h for the rest */
+#define DCX_DCEEMPTY        0x00000800
+#define DCX_DCEBUSY         0x00001000
+#define DCX_DCEDIRTY        0x00002000
+#define DCX_LAYEREDWIN      0x00004000
+#define DCX_DCPOWNED        0x00008000
+#define DCX_NOCLIPCHILDREN  0x00080000
+#define DCX_NORECOMPUTE     0x00100000
+#define DCX_INDESTROY       0x00400000
+
+INIT_FUNCTION NTSTATUS NTAPI InitDCEImpl(VOID);
+PDCE FASTCALL DceAllocDCE(PWND Window, DCE_TYPE Type);
+HWND FASTCALL IntWindowFromDC(HDC hDc);
+PDCE FASTCALL DceFreeDCE(PDCE dce, BOOLEAN Force);
+void FASTCALL DceEmptyCache(void);
+VOID FASTCALL DceResetActiveDCEs(PWND Window);
+void FASTCALL DceFreeClassDCE(HDC);
+HWND FASTCALL UserGethWnd(HDC,PWNDOBJ*);
+void FASTCALL DceFreeWindowDCE(PWND);
+void FASTCALL DceFreeThreadDCE(PTHREADINFO);