www.pudn.com > mu_explorer.rar > CJMenu.h


//************************************************************************* 
// CJMenu.h : header file 
// Version : 2.5 
// Date : October 18, 1999 
// Author : Brent Corkum 
//  
// Portions of code supplied by: 
// Ben Ashley,Girish Bharadwaj,Jean-Edouard Lachand-Robert, 
// Robert Edward Caldecott,Kenny Goers,Leonardo Zide, 
// Stefan Kuhr, Reiner Jung 
// 
// Bug Fixes: 
// Stefan Kuhr,Martin Vladic,Kim Yoo Chul 
// 
// You are free to use/modify this code but leave this header intact. 
// 
///////////////////////////////////////////////////////////////////////////// 
/**************************************************************************** 
 * 
 * $Date: 10/24/99 2:09a $ 
 * $Revision: 6 $ 
 * $Archive: /CodeJock/Include/CJMenu.h $ 
 * 
 * $History: CJMenu.h $ 
 *  
 * *****************  Version 6  ***************** 
 * User: Kirk Stowell Date: 10/24/99   Time: 2:09a 
 * Updated in $/CodeJock/Include 
 * Upgraded to version 2.5 of BCMenu 
 *  
 * *****************  Version 5  ***************** 
 * User: Kirk Stowell Date: 10/14/99   Time: 12:41p 
 * Updated in $/CodeJock/Include 
 * Added source control history to file header. 
 * 
 ***************************************************************************/ 
///////////////////////////////////////////////////////////////////////////// 
 
#ifndef __CJMENU_H__ 
#define __CJMENU_H__ 
 
#include  
 
// CCJMenuData class. Fill this class structure to define a single menu item: 
 
class  CCJMenuData 
{ 
	wchar_t *m_szMenuText; 
public: 
	CCJMenuData () {menuIconNormal=-1;xoffset=-1;bitmap=NULL; 
	nFlags=0;nID=0;syncflag=0;m_szMenuText=NULL;}; 
	void SetAnsiString(LPCSTR szAnsiString); 
	void SetWideString(const wchar_t *szWideString); 
	const wchar_t *GetWideString(void) {return m_szMenuText;}; 
	~CCJMenuData (); 
	CString GetString(void);//returns the menu text in ANSI or UNICODE 
	int xoffset; 
	int menuIconNormal; 
	UINT nFlags,nID,syncflag; 
	CImageList *bitmap; 
}; 
 
//struct CMenuItemInfo : public MENUITEMINFO { 
struct  CMenuItemInfo : public  
//MENUITEMINFO  
#ifndef UNICODE   //SK: this fixes warning C4097: typedef-name 'MENUITEMINFO' used as synonym for class-name 'tagMENUITEMINFOA' 
tagMENUITEMINFOA 
#else 
tagMENUITEMINFOW 
#endif 
    { 
	CMenuItemInfo() 
	{ memset(this, 0, sizeof(MENUITEMINFO)); 
	  cbSize = sizeof(MENUITEMINFO); 
	} 
}; 
 
typedef enum {Normal,TextOnly} HIGHLIGHTSTYLE; 
 
#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  CCJMenu : public CMenu  // Derived from CMenu 
{ 
	// Construction 
public: 
	CCJMenu();  
	 
	// Attributes 
protected: 
	CTypedPtrArray m_MenuList;  // Stores list of menu items  
	 
	// When loading an owner-drawn menu using a Resource, CCJMenu must keep track of 
	// the popup menu's that it creates. Warning, this list *MUST* be destroyed 
	// last item first :) 
	CTypedPtrArray  m_SubMenus;  // Stores list of sub-menus  
	 
	// Stores a list of all CCJMenu's ever created  
	static CTypedPtrArray  m_AllSubMenus; 
	 
	// Operations 
public:  
	// Overrides 
	// ClassWizard generated virtual function overrides 
	//{{AFX_VIRTUAL(CCustomMenu) 
	//}}AFX_VIRTUAL  
	// Implementation 
public: 
	static BOOL IsNewShell(void); 
	void SetBitmapBackground(COLORREF color); 
	void SetDisableOldStyle(void); 
	void UnSetDisableOldStyle(void); 
	BOOL GetDisableOldStyle(void); 
	void UnSetBitmapBackground(void); 
	BOOL AddBitmapToImageList(CImageList *list,UINT nResourceID); 
	BOOL LoadFromToolBar(UINT nID,UINT nToolBar,int& xoffset); 
	void InsertSpaces(void); 
	static LRESULT FindKeyboardShortcut(UINT nChar,UINT nFlags,CMenu *pMenu); 
	static void UpdateMenu(CMenu *pmenu); 
	static BOOL IsMenu(CMenu *submenu); 
	static BOOL IsMenu(HMENU submenu); 
	void DrawCheckMark(CDC *pDC,int x,int y,COLORREF color); 
	void DrawRadioDot(CDC *pDC,int x,int y,COLORREF color); 
	CCJMenu *FindMenuOption(int nId,int& nLoc); 
	CCJMenuData *FindMenuOption(wchar_t *lpstrText); 
	BOOL GetMenuText(UINT id,CString &string,UINT nFlags = MF_BYPOSITION ); 
	CImageList *checkmaps; 
	BOOL checkmapsshare; 
	int m_selectcheck; 
	int m_unselectcheck; 
	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); 
	static HBITMAP LoadSysColorBitmap(int nResourceId); 
	BOOL GetBitmapFromImageList(CDC* pDC,CImageList *imglist,int nIndex,CBitmap &bmp); 
	 
	virtual ~CCJMenu();  // Virtual Destructor  
	// Drawing:  
	virtual void DrawItem( LPDRAWITEMSTRUCT);  // Draw an item 
	virtual void MeasureItem( LPMEASUREITEMSTRUCT );  // Measure an item 
	 
	// Customizing: 
	 
	void SetIconSize (int, int);  // Set icon size 
	 
	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 AppendMenu( UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL ) 
		{ return CMenu::AppendMenu( nFlags, nIDNewItem, lpszNewItem ); } 
 
	BOOL AppendMenu( UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp ) 
		{ return CMenu::AppendMenu( nFlags, nIDNewItem, pBmp ); } 
 
	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); 
	CCJMenuData *NewODMenu(UINT pos,UINT nFlags,UINT nID,CString string); 
	void SynchronizeMenu(void); 
	void CCJMenu::InitializeMenuList(int value); 
	void CCJMenu::DeleteMenuList(void); 
	CCJMenuData *CCJMenu::FindMenuList(UINT nID); 
	virtual BOOL LoadMenu(LPCTSTR lpszResourceName);  // Load a menu 
	virtual BOOL LoadMenu(int nResource);  // ...  
	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); 
	 
	// new overrides for dynamic menu's 
	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); 
	CCJMenu* AppendODPopupMenuA(LPCSTR lpstrText); 
	CCJMenu* AppendODPopupMenuW(wchar_t *lpstrText); 
	 
	// Destoying: 
	 
	virtual BOOL DestroyMenu(); 
	 
	// Generated message map functions 
protected: 
	int m_iconX,m_iconY; 
	COLORREF m_bitmapBackground; 
	BOOL m_bitmapBackgroundFlag; 
	BOOL disable_old_style; 
};  
 
#endif 
 
//*************************************************************************