aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/General/gen_ml/skinnedwnd.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Plugins/General/gen_ml/skinnedwnd.h')
-rw-r--r--Src/Plugins/General/gen_ml/skinnedwnd.h101
1 files changed, 101 insertions, 0 deletions
diff --git a/Src/Plugins/General/gen_ml/skinnedwnd.h b/Src/Plugins/General/gen_ml/skinnedwnd.h
new file mode 100644
index 00000000..dda147f5
--- /dev/null
+++ b/Src/Plugins/General/gen_ml/skinnedwnd.h
@@ -0,0 +1,101 @@
+#ifndef NULLOSFT_MEDIALIBRARY_SKINNED_WINDOW_HEADER
+#define NULLOSFT_MEDIALIBRARY_SKINNED_WINDOW_HEADER
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+#include <windows.h>
+#include "./ml.h"
+#include "./ml_ipc_0313.h"
+#include "./reflectmsg.h"
+#include "./stockobjects.h"
+
+
+#define MLWM_SKINCHANGED (WM_APP + 0x2FFF)
+
+#define BORDER_NONE 0
+#define BORDER_SUNKEN 1
+#define BORDER_FLAT 2
+
+typedef enum SkinnedWndRedraw
+{
+ SWR_NONE = 0,
+ SWR_INVALIDATE = (1 << 0),
+ SWR_ERASE = (1 << 1),
+ SWR_UPDATE = (1 << 2),
+ SWR_ALLCHILDREN = (1 << 3),
+}SkinnedWndRedraw;
+
+DEFINE_ENUM_FLAG_OPERATORS(SkinnedWndRedraw);
+
+
+class SkinnedWnd
+{
+protected:
+ SkinnedWnd(BOOL bIsDialog);
+ virtual ~SkinnedWnd(void);
+
+public:
+ static SkinnedWnd *GetFromHWND(HWND hwndSkinned);
+ static BOOL IsDwmCompositionEnabled();
+
+ BOOL IsUnicode(void);
+ BOOL IsAttached(void);
+ INT GetType(void) { return (INT)LOWORD(wnddata); }
+ HWND GetHWND(void) { return hwnd; }
+ void SkinChanged(BOOL bNotifyChildren, BOOL bRedraw);
+ void EnableReflection(BOOL bEnable);
+ virtual BOOL SetStyle(UINT newStyle, BOOL bRedraw);
+ virtual UINT GetStyle(void) { return style; }
+ void SetMinMaxInfo(MLSKINNEDMINMAXINFO *minMax);
+
+protected:
+ virtual BOOL Attach(HWND hwndToSkin);
+ void SetType(INT newType) { ((wnddata & 0xFFFF0000) | (newType & 0xFFFF)); }
+ LRESULT CallPrevWndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);
+ LRESULT CallDefWndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);
+
+ virtual LRESULT WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam);
+ virtual void OnSkinChanged(BOOL bNotifyChildren, BOOL bRedraw);
+ virtual void OnSkinUpdated(BOOL bNotifyChildren, BOOL bRedraw);
+ virtual BOOL OnMediaLibraryIPC(INT msg, INT_PTR param, LRESULT *pResult);
+
+ virtual INT OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS *pncsp);
+ virtual INT OnNcHitTest(POINTS pts);
+ virtual void OnNcPaint(HRGN rgnUpdate);
+ virtual void OnPrint(HDC hdc, UINT options);
+ virtual void DrawBorder(HDC hdc);
+ virtual void OnDwmCompositionChanged(void);
+ virtual UINT GetBorderType(void);
+ virtual HPEN GetBorderPen(void);
+ void OnUpdateUIState(UINT uAction, UINT uState);
+ virtual void OnStyleChanged(INT styleType, STYLESTRUCT *pss);
+
+ void DisableRedraw();
+ void EnableRedraw(SkinnedWndRedraw redrawFlags);
+
+ virtual BOOL OnDirectMouseWheel(INT delta, UINT vtKey, POINTS pts);
+ virtual void OnGetMinMaxInfo(MINMAXINFO *minMax);
+
+public:
+ static void DrawBorder(HDC hdc, RECT *prc, UINT type, HPEN pen);
+
+private:
+ static LRESULT WINAPI WindowProcReal(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+ friend BOOL SkinWindowEx(HWND hwndToSkin, INT type, UINT style);
+ friend BOOL UnskinWindow(HWND hwndToUnskin);
+
+protected:
+ HWND hwnd;
+ UINT style;
+ WORD uiState;
+ ULONG redrawLock;
+ SIZE minSize;
+ SIZE maxSize;
+private:
+ WNDPROC fnWndProc;
+ LONG wnddata;
+};
+
+#endif // NULLOSFT_MEDIALIBRARY_SKINNED_WINDOW_HEADER \ No newline at end of file