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

📄 menuext.h

📁 串口收发工具
💻 H
字号:
#if !defined(AFX_CMENUEXT_H__INCLUDED_)
#define AFX_CMENUEXT_H__INCLUDED_

#include <afxtempl.h>

// CMenuExtData用来记录一个菜单项数据
class CMenuExtData
{
public:
	CMenuExtData()
	{
		xoffset = -1;
		menuIconNormal = -1;
		nFlags = 0;
		nID = 0;
		syncflag = 0;
		bitmap = NULL;
		pContext = NULL;
		m_szMenuText = NULL;
	}
	~CMenuExtData ();
	void SetAnsiString(LPCSTR szAnsiString);
	void SetWideString(const wchar_t *szWideString);
	CString GetString(); //返回菜单文本串(ANSI或UNICODE)
	const wchar_t *GetWideString() { return m_szMenuText; }
public:
	int xoffset;
	int menuIconNormal;
	UINT nFlags,nID,syncflag;
	CImageList *bitmap;
	void *pContext; // used to attach user data
protected:
	wchar_t *m_szMenuText;
};

struct CMenuItemInfo : public tagMENUITEMINFOA
/*
#ifndef UNICODE
tagMENUITEMINFOA
#else
tagMENUITEMINFOW
#endif
// 此结构可以参照MENUITEMINFO结构来使用
*/
{
	CMenuItemInfo()
	{
		memset(this,0,sizeof(MENUITEMINFO));
		cbSize = sizeof(MENUITEMINFO);
	}
};

typedef enum { Normal,TextOnly } HIGHLIGHTSTYLE;

#define AppendMenu			AppendMenuA
#define InsertMenu			InsertMenuA
#define InsertODMenu		InsertODMenuA
#define AppendODMenu		AppendODMenuA
#define ModifyODMenu		ModifyODMenuA
#define AppendODPopupMenu	AppendODPopupMenuA
/*
#ifndef UNICODE
#define AppendMenu AppendMenuA
#define InsertMenu InsertMenuA
#define InsertODMenu InsertODMenuA
#define AppendODMenu AppendODMenuA
#define AppendODPopupMenu AppendODPopupMenuA
#define ModifyODMenu ModifyODMenuA
#else
#define AppendMenu AppendMenuW
#define InsertMenu InsertMenuW
#define InsertODMenu InsertODMenuW
#define AppendODMenu AppendODMenuW
#define ModifyODMenu ModifyODMenuW
#define AppendODPopupMenu AppendODPopupMenuW
#endif
*/

class CMenuExt : public CMenu
{
	// Construction
public:
	CMenuExt(); 
	
	// Attributes
protected:
	CTypedPtrArray<CPtrArray, CMenuExtData*> m_MenuList; //保存各个菜单项的列表

	CTypedPtrArray<CPtrArray, HMENU> m_SubMenus; //保存子菜单列表

	//保存所有生成的CMenuExt(主要用来存储所有的弹出菜单带有的每个子菜单项)
	static CTypedPtrArray<CPtrArray, HMENU> m_AllSubMenus;

	// Operations
public: 
	// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CCustomMenu)
	//}}AFX_VIRTUAL 
	// Implementation
public:
	static BOOL IsNewShell();
	static LRESULT FindKeyboardShortcut(UINT nChar,UINT nFlags,CMenu *pMenu);
	static void UpdateMenu(CMenu *pMenu);
	static BOOL IsMenu(CMenu *subMenu);
	static BOOL IsMenu(HMENU subMenu);
	static HBITMAP LoadSysColorBitmap(int nResourceId);

	void SetBitmapBackground(COLORREF color);
	void SetDisableOldStyle();
	void UnSetDisableOldStyle();
	void UnSetBitmapBackground();
	BOOL GetDisableOldStyle();
	BOOL AddBitmapToImageList(CImageList *list,UINT nResourceID);
	BOOL LoadFromToolBar(UINT nID,UINT nToolBar,int& xoffset);
	BOOL GetMenuText(UINT id,CString &string,UINT nFlags = MF_BYPOSITION );
	void InsertSpaces();
	void DrawCheckMark(CDC *pDC,int x,int y,COLORREF color);
	void DrawRadioDot(CDC *pDC,int x,int y,COLORREF color);
	CMenuExtData *CMenuExt::FindMenuItem(UINT nID);
	CMenuExt *FindMenuOption(int nId,int& nLoc);
	CMenuExtData *FindMenuOption(wchar_t *lpstrText);
	CImageList *checkmaps;
	BOOL checkmapsshare;
	int m_selectcheck;
	int m_unselectcheck;
	BOOL m_bDynIcons;
	
	void LoadCheckmarkBitmap(int unselect,int select);
	void DitherBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HBITMAP hbm, int nXSrc, int nYSrc);
	void DitherBlt2(CDC *drawdc, int nXDest, int nYDest, int nWidth, int nHeight, CBitmap &bmp, int nXSrc, int nYSrc);
	BOOL GetBitmapFromImageList(CDC* pDC,CImageList *imglist,int nIndex,CBitmap &bmp);
	BOOL ImageListDuplicate(CImageList *il,int xoffset,CImageList *newlist);
	
	virtual ~CMenuExt();
	virtual void DrawItem( LPDRAWITEMSTRUCT); //菜单项显示
	virtual void MeasureItem( LPMEASUREITEMSTRUCT );
	
	void SetIconSize (int, int); //设置图标大小
	
	BOOL AppendODMenuA(LPCSTR lpstrText,UINT nFlags = MF_OWNERDRAW, UINT nID = 0, int nIconNormal = -1);
	BOOL AppendODMenuW(wchar_t *lpstrText, UINT nFlags = MF_OWNERDRAW, UINT nID = 0, int nIconNormal = -1);
	BOOL AppendODMenuA(LPCSTR lpstrText, UINT nFlags, UINT nID, CImageList *il, int xoffset);
	BOOL AppendODMenuW(wchar_t *lpstrText, UINT nFlags, UINT nID, CImageList *il, int xoffset);
	BOOL InsertODMenuA(UINT nPosition, LPCSTR lpstrText, UINT nFlags = MF_OWNERDRAW, UINT nID = 0,int nIconNormal = -1);
	BOOL InsertODMenuW(UINT nPosition, wchar_t *lpstrText, UINT nFlags = MF_OWNERDRAW, UINT nID = 0, int nIconNormal = -1);
	BOOL InsertODMenuA(UINT nPosition, LPCSTR lpstrText, UINT nFlags, UINT nID, CImageList *il, int xoffset);
	BOOL InsertODMenuW(UINT nPosition, wchar_t *lpstrText, UINT nFlags, UINT nID, CImageList *il, int xoffset);
	BOOL ModifyODMenuA(const char *lpstrText,UINT nID=0,int nIconNormal=-1);
	BOOL ModifyODMenuA(const char *lpstrText,UINT nID,CImageList *il,int xoffset);
	BOOL ModifyODMenuA(const char *lpstrText,UINT nID,CBitmap *bmp);
	BOOL ModifyODMenuA(const char *lpstrText,const char *OptionText,int nIconNormal);
	BOOL ModifyODMenuW(wchar_t *lpstrText,UINT nID=0,int nIconNormal=-1);
	BOOL ModifyODMenuW(wchar_t *lpstrText,UINT nID,CImageList *il,int xoffset);
	BOOL ModifyODMenuW(wchar_t *lpstrText,UINT nID,CBitmap *bmp);
	BOOL ModifyODMenuW(wchar_t *lpstrText,wchar_t *OptionText,int nIconNormal);
	CMenuExtData *NewODMenu(UINT pos,UINT nFlags,UINT nID,CString string);
	void SynchronizeMenu(void);
	void CMenuExt::InitializeMenuList(int value);
	void CMenuExt::DeleteMenuList(void);
	CMenuExtData *CMenuExt::FindMenuList(UINT nID);
	virtual BOOL LoadMenu(LPCTSTR lpszResourceName);
	virtual BOOL LoadMenu(UINT nID);
	void AddFromToolBar(CToolBar* pToolBar, int nResourceID);
	BOOL Draw3DCheckmark(CDC *dc, const CRect& rc,BOOL bSelected,HBITMAP hbmCheck);
	BOOL LoadToolbar(UINT nToolBar);
	BOOL LoadToolbars(const UINT *arID,int n);

	// 重载是为了动态菜单使用
	BOOL RemoveMenu(UINT uiId,UINT nFlags);
	BOOL DeleteMenu(UINT uiId,UINT nFlags);
	BOOL AppendMenuA(UINT nFlags,UINT nIDNewItem,const char *lpszNewItem,int nIconNormal=-1);
	BOOL AppendMenuA(UINT nFlags,UINT nIDNewItem,const char *lpszNewItem,CImageList *il,int xoffset);
	BOOL AppendMenuA(UINT nFlags,UINT nIDNewItem,const char *lpszNewItem,CBitmap *bmp);
	BOOL AppendMenuW(UINT nFlags,UINT nIDNewItem,wchar_t *lpszNewItem,int nIconNormal=-1);
	BOOL AppendMenuW(UINT nFlags,UINT nIDNewItem,wchar_t *lpszNewItem,CImageList *il,int xoffset);
	BOOL AppendMenuW(UINT nFlags,UINT nIDNewItem,wchar_t *lpszNewItem,CBitmap *bmp);
	BOOL InsertMenuA(UINT nPosition,UINT nFlags,UINT nIDNewItem,const char *lpszNewItem,int nIconNormal=-1);
	BOOL InsertMenuA(UINT nPosition,UINT nFlags,UINT nIDNewItem,const char *lpszNewItem,CImageList *il,int xoffset);
	BOOL InsertMenuA(UINT nPosition,UINT nFlags,UINT nIDNewItem,const char *lpszNewItem,CBitmap *bmp);
	BOOL InsertMenuW(UINT nPosition,UINT nFlags,UINT nIDNewItem,wchar_t *lpszNewItem,int nIconNormal=-1);
	BOOL InsertMenuW(UINT nPosition,UINT nFlags,UINT nIDNewItem,wchar_t *lpszNewItem,CImageList *il,int xoffset);
	BOOL InsertMenuW(UINT nPosition,UINT nFlags,UINT nIDNewItem,wchar_t *lpszNewItem,CBitmap *bmp);
	CMenuExt* AppendODPopupMenuA(LPCSTR lpstrText);
	CMenuExt* AppendODPopupMenuW(wchar_t *lpstrText);

	virtual BOOL DestroyMenu();
	
	// Generated message map functions
protected:
	int m_iconX,m_iconY;
	COLORREF m_bitmapBackground;
	BOOL m_bitmapBackgroundFlag;
	BOOL disable_old_style;
}; 

#endif

/*
	使用说明:
		ModifyODMenu	-- 可以使您任意修改所需要显示图标的菜单项
		LoadToolbar		-- 可以一次性将所有的菜单项都加上图标(只要工具条中存在对应的命令)

	基本操作实例:
		CMenuExt PopMenu;
		PopMenu.LoadMenu(IDR_POPUPMENU);
		PopMenu.ModifyODMenu(NULL,ID_EDIT_PASTE,IDR_MAINFRAME);
		PopMenu.ModifyODMenu(NULL,ID_APP_ABOUT,IDR_MAINFRAME);
		PopMenu.ModifyODMenu(NULL,_T("&Rocscience on the Web"),IDB_NET);//SK modified for Unicode
		//(或)PopMenu.LoadToolbar(IDR_MAINFRAME);
		
		//下面操作同CMenu
		ClientToScreen(&point);
		CMenuExt *pSub = (CMenuExt *)PopMenu.GetSubMenu(0);
		pSub->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,AfxGetMainWnd());
		PopMenu.DestroyMenu();
*/

⌨️ 快捷键说明

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