diff options
Diffstat (limited to 'Src/Plugins/General/gen_ml/skinnedmenuwnd.h')
-rw-r--r-- | Src/Plugins/General/gen_ml/skinnedmenuwnd.h | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/Src/Plugins/General/gen_ml/skinnedmenuwnd.h b/Src/Plugins/General/gen_ml/skinnedmenuwnd.h new file mode 100644 index 00000000..10476de6 --- /dev/null +++ b/Src/Plugins/General/gen_ml/skinnedmenuwnd.h @@ -0,0 +1,97 @@ +#ifndef NULLOSFT_MEDIALIBRARY_SKINNED_MENU_WINDOW_HEADER +#define NULLOSFT_MEDIALIBRARY_SKINNED_MENU_WINDOW_HEADER + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +#include "./skinnedwnd.h" +#include "./skinnedmenuthreadinfo.h" + +#define MENU_BUTTON_SCROLLUP 0x0001 +#define MENU_BUTTON_SCROLLDOWN 0x0002 + +#define MENU_BUTTON_STATE_DISABLED 0x0001 +#define MENU_BUTTON_STATE_PRESSED 0x0002 + +class SkinnedMenuWnd : public SkinnedWnd +{ +protected: + SkinnedMenuWnd(UINT menuExStyle, HMLIMGLST hmlil, INT forcedWidth, MENUCUSTOMIZEPROC customProc, ULONG_PTR customParam); + virtual ~SkinnedMenuWnd(void); + +public: + HMENU GetMenuHandle(); + HWND GetOwnerWindow(); + HWND SetOwnerWindow(HWND hwndOwner); + +protected: + virtual BOOL Attach(HWND hwndMenu, HWND hwndOwner); + virtual BOOL AttachMenu(HMENU hMenuToAttach); + virtual LRESULT WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam); // treat this as dialog proc + virtual HPEN GetBorderPen(void); + BOOL OnReflectedDrawItem(DRAWITEMSTRUCT *pdis); + BOOL OnReflectedMeasureItem(MEASUREITEMSTRUCT *pmis); + HFONT GetMenuFont(BOOL fBold); + INT GetLineHeight(); + + virtual LRESULT OnEraseBackground(HDC hdc); + virtual void OnPrint(HDC hdc, UINT options); + virtual void OnNcPaint(HRGN rgnUpdate); + + virtual INT OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS *pncsp); + virtual void DrawBorder(HDC hdc); + + BOOL IsSkinnedItem(UINT itemId); + + BOOL DrawScrollButton(HDC hdc, UINT scrollButton); + void PaintScrollButton(HDC hdc, const RECT *prc, UINT scrollButton, BOOL buttonState); + LRESULT OnMenuSelect(UINT selectedItem); + LRESULT CallHookedWindowProc(UINT uItem, BOOL fByPosition, UINT uMsg, WPARAM wParam, LPARAM lParam); + INT FindHiliteItem(HMENU hMenu); + +private: + friend BOOL SkinWindowEx(HWND hwndToSkin, INT type, UINT style); + friend class SkinnedMenu; + +protected: + typedef struct SkinnedItemRecord + { + unsigned int itemId; + unsigned int originalId; + BOOL skinned; + BOOL failed; + }SkinnedItemRecord; + +protected: + SkinnedMenuThreadInfo *threadInfo; + HWND hOwner; + HMENU hMenu; + UINT menuExStyle; + HMLIMGLST hmlil; + INT lineWidth = 0; + INT lineHeight = 0; + INT imageWidth = 0; + INT imageHeight = 0; + INT shortcutCX = 0; + INT textCX = 0; + BOOL bRestoreShadow; + HFONT hBoldFont; + HBRUSH backBrush; + HPEN borderPen; + HBRUSH menuOrigBrush; + + SkinnedItemRecord *skinnedItems; + INT skinnedItemCount; + INT skinnedItemCursor; + INT prevSelectedItem; + HBITMAP scrollBitmap; + HBITMAP disabledScrollBitmap; + + UINT menuFlags; + + MENUCUSTOMIZEPROC customProc; + ULONG_PTR customParam; +}; + +#endif // NULLOSFT_MEDIALIBRARY_SKINNED_MENU_WINDOW_HEADER
\ No newline at end of file |