龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

Visual C++中自绘菜单的实现(4)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
CString strText; //菜单项的文本; UINT uID; //菜单的ID标识号; UINT uIndex; //菜单项所要画的图标在工具条图标序列中的索引号; int uPositionImageLeft; //当前菜单项
 CString strText; //菜单项的文本;
 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; //菜单分割条的默认高度

精彩图集

赞助商链接