Visual C++中自绘菜单的实现(4)
UINT uID; //菜单的ID标识号;
UINT uIndex; //菜单项所要画的图标在工具条图标序列中的索引号;
int uPositionImageLeft; //当前菜单项在纵向菜单中的位置;
}MENUITEM;
typedef MENUITEM * LPMENUITEM;
//////////////////////////////////////////////////////////////
class CMenuEx : public CMenu
{
public:
void InitPopupMenu(CMenu *pPopupMenu,UINT uToolBar,CToolBar *pToolBar);
void ChangeStyle(CMenu *pMenu,CToolBar *pToolBar,BOOL bIsMainMenu=FALSE);
void SetHighLightColor(COLORREF crColor);
void SetBackColor(COLORREF);
void SetTextColor(COLORREF);
void SetImageLeft(UINT idBmpLeft);
void MeasureItem(LPMEASUREITEMSTRUCT lpMIS);
void InitMenu(CMenu *pMenu,UINT uToolBar,CToolBar *pToolBar);
void DrawItem(LPDRAWITEMSTRUCT lpDIS);
CMenuEx();
virtual ~CMenuEx();
protected:
int m_nSeparator;
CSize m_szImageLeft; //纵向位图尺寸;
CBitmap m_bmpImageLeft; //纵向位图对象;
int m_nWidthLeftImage; //纵向位图的宽度;
BOOL m_bHasImageLeft; //是否有纵向位图
BOOL m_bInitial; //菜单是否已初始化,即设定了自绘风格
int GetImageFromToolBar(UINT uToolBar,CToolBar *pToolBar,COLORREF crMask=RGB(192,192,192)); //从工具条中获取图标信息;
CList m_ListMenu;
COLORREF m_colMenu;
COLORREF m_colTextSelected;
void DrawImageLeft(CDC *pDC,CRect &rect,LPMENUITEM lpItem); //画纵向位图;
void TextMenu(CDC *pDC,CRect &rect,CRect rtText,BOOL bSelected,BOOL bGrayed,LPMENUITEM lpItem); //画菜单文本;
CImageList m_ImageList; //图像列表;
COLORREF m_colText;
CSize m_szImage; //菜单项位图的大小
void DrawMenuItemImage(CDC *pDC,CRect &rect,BOOL bSelected,BOOL bChecked,BOOL bGrayed,BOOL bHasImage,LPMENUITEM lpItem);//画菜单图标;
void GrayString(CDC *pDC,const CString &str,const CRect rect);//显示灰色字符串;
};
#endif
/////////////////////////////////////////////////CMenuEx类的实现文件;
#include "stdafx.h"
#include "MenuEx.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
///////////////////////////////////////////// //构造函数;
CMenuEx::CMenuEx():m_szImage(16,15)
{
m_colMenu =::GetSysColor(COLOR_MENU);
m_colText =::GetSysColor(COLOR_MENUTEXT);
m_colTextSelected =::GetSysColor(COLOR_HIGHLIGHTTEXT);
m_bInitial =FALSE;
m_bHasImageLeft =FALSE;
m_nSeparator = 10; //菜单分割条的默认高度