⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 skinmenu.h

📁 WMI接口测试Demo程序
💻 H
字号:
// SkinMenu.h: interface for the CSkinMenu class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_SKINMENU_H__E2EFA8F0_B9CD_41AB_98FD_812C963B7ACC__INCLUDED_)
#define AFX_SKINMENU_H__E2EFA8F0_B9CD_41AB_98FD_812C963B7ACC__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#ifndef NO_SKIN_MENUS

#include "subclass.h"
#include "skinglobals.h"

// style flags
enum
{
	SKMS_ROUNDCORNERS = 0x0001,
	SKMS_SIDEBAR = 0x0002,
	SKMS_FLAT = 0x0004,
};

class ISkinMenuRender
{
public:
	virtual BOOL DrawMenuBorder(CDC* pDC, LPRECT pRect) { return FALSE; }
	virtual BOOL DrawMenuSidebar(CDC* pDC, LPRECT pRect, LPCTSTR szTitle = NULL) { return FALSE; }
	virtual BOOL DrawMenuClientBkgnd(CDC* pDC, LPRECT pRect, LPRECT pClip) { return FALSE; }
	virtual BOOL DrawMenuNonClientBkgnd(CDC* pDC, LPRECT pRect) { return FALSE; }
};

class CSkinGlobals;

class CSkinMenu : public CSubclassWnd
{
public:
	CSkinMenu(CSkinGlobals* pGlobals = NULL, DWORD dwStyle = SKMS_SIDEBAR, int nSBWidth = 10);
	virtual ~CSkinMenu();

	virtual BOOL AttachWindow(HWND hWnd);
	BOOL DetachWindow();

	void SetContextWnd(HWND hWnd);
	void SetMenu(HMENU hMenu, CSkinMenu* pParentMenu = NULL);

	const HMENU GetMenu() const { return m_hMenu; }

	static BOOL IsMenuWnd(HWND hWnd);
	static void SetRenderer(ISkinMenuRender* pRenderer) { s_pRenderer = pRenderer; }

protected:
	int m_nSelIndex;
	DWORD m_dwStyle;
	CSkinGlobals* m_pGlobals;
	int m_nSidebarWidth;
	HWND m_hContextWnd;
	HMENU m_hMenu;
	CSkinMenu* m_pParentMenu;

	BOOL m_bAnimatedMenus;
	BOOL m_bFirstRedraw; // fix for animated menus

	static ISkinMenuRender* s_pRenderer;

protected:
	virtual void OnNcPaint(CDC* pDC);
	virtual void OnPrintClient(CDC* pDC, DWORD dwFlags);
	virtual void OnPaint(CDC* pDC);

	virtual LRESULT WindowProc(CWnd* pRealWnd, UINT msg, WPARAM wp, LPARAM lp); 
	BOOL IsValid() { return IsHooked(); } // is it hooked up and ready to go

	void GetDrawRect(LPRECT pWindow, LPRECT pClient = NULL);
	void SetTransparent();
	CDC* ReplaceSystemColors(CDC* pDCDest, CDC* pDestSrc, LPRECT pRect, LPRECT pClip);

	void GetInvalidRect(int nCurSel, int nPrevSel, LPRECT lpRect); // in client coords
	int GetCurSel();

	// style helpers
	BOOL Sidebar() { return m_dwStyle & SKMS_SIDEBAR; }
	BOOL RoundCorners() { return m_dwStyle & SKMS_ROUNDCORNERS; }
	BOOL Flat() { return m_dwStyle & SKMS_FLAT; }

	static BOOL ReplaceColor(CDC* pDCSrc, COLORREF crSrc, CDC* pDCDest, COLORREF crDest, LPRECT pRect, LPRECT pClip);

	// CSkinGlobals wrappers
	COLORREF GetColor(int nColor);
	CFont* GetFont(int nFont);

	inline void SwapDCs(CDC*& pDC1, CDC*& pDC2)
	{
		CDC* pTemp = pDC1;
		pDC1 = pDC2;
		pDC2 = pTemp;
	}

};

#endif // NO_SKIN_CTRLS

#endif // !defined(AFX_SKINMENU_H__E2EFA8F0_B9CD_41AB_98FD_812C963B7ACC__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -