您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:147 来源:vckbase.com

本文章共7979字,分5页,当前第3页,快速翻页:
 
三、实现方法

  有了以上的强有力的武器,就可以对我们的程序下手了:)在MDI或SDI中使用CMenuEx的时候需要修改以下地方。
  1. 先将MenuEx.h和MenuEx.cpp添加到工程中,在CMainFrame中添加头文件,CMenuEx对象,用于存储菜单图像的CImageList对象和初始化菜单程序。
    逆风编程精品
    #include "MenuEx.h" // 添加头文件
    
    
    
    class CMainFrame : public CMDIFrameWnd
    
    {
    
    	...
    
    public:
    
    	HMENU InitMainFrameMenu();		// 初始化主菜单
    
    	HMENU InitImageTypeMenu();		// 初始化文档模板菜单
    
    	
    
    protected:  // CMenuEx members
    
    	CMenuEx  m_menuMainFrame;		// 主窗体没有打开任何文档时菜单
    
    	CMenuEx  m_menuImageType;		// 主窗体打开文档时菜单(文档模板菜单)
    
    	
    
    protected:  // CMenuEx''s image list members	
    
    	CImageList	m_imageMenu;		// 菜单项正常的图像列表 
    
    	CImageList	m_imageMenuDisable;	// 菜单项禁用时的图像列表
    
    	CImageList	m_imageMenuHot;		// 菜单项被选中时的图像列表
    
    	...
    
    }        
  2. 撰写菜单图像索引表,初始化菜单程序,初始化菜单图像列表程序, 和两个重要的消息映射函数CMainFrame::OnMeasureItem()和CMainFrame::OnInitPopupMenu()。 (什么?不会添加!,找ClassWizard帮忙或许有点帮助了:))
    // 声明,因为下面的结构要用到 CMenuEx*,又不支持向后引用,又什么办法啊!
    
    class CMenuEx;
    
    //自绘菜单数据项结构,就是要传给系统的那个牛X的LPCTSTR指针所指向的东东
    
    typedef struct tagMENUITEM
    
    {
    
    	CString		strText;		// 菜单名称
    
    	UINT		nID;		// 菜单ID号
    
    	// 分割条的ID是 0
    
    	// 子菜单的ID是 -1
    
    				
    
    	CSize		itemSize;		// 菜单项的尺寸,不包括菜单图像的尺寸
    
    	
    
    	CImageList*     pImageList;		// 菜单项的正常图像列表
    
    	CImageList*     pDisabledImageList;	// 菜单项的禁用图像列表
    
    	CImageList*     pHotImageList;	// 菜单项的选中图像列表
    
    	UINT		nImageIndex;	// 菜单项的图像列表索引,-1表示没有图像
    
    	
    
    	BOOL		bIsSubMenu;		// 表示当前菜单项是否为子菜单项
    
    	
    
    	CMenuEx*	pSubMenu;		// 如果是一般菜单,该值为NULL
    
    	// 如果bIsSubMenu为TRUE,该值为指向子菜单项的CMenuEx*指针
    
    	
    
    } MENUITEM,*LPMENUITEM;
    
    
    
    ///////////////////////////////////////////
    
    // 在ManiFram.cpp 中添加菜单图像索引表
    
    static UINT nMenuImageIndex[] =
    
    {
    
    	ID_FILE_OPEN,
    
    		ID_FILE_SAVE,
    
    		ID_FILE_PRINT,		
    
    		ID_EDIT_COPY,
    
    		ID_EDIT_PASTE,	
    
    		ID_EDIT_UNDO,
    
    		ID_EDIT_REDO,		
    
    		ID_APP_ABOUT,
    
    		
    
    		ID_IMAGE_LEVEL,
    
    		ID_IMAGE_EQUALIZE,		
    
    		ID_IMAGE_SMOOTH,
    
    		ID_IMAGE_SHARP,		
    
    		ID_IMAGE_SIZE,
    
    		ID_IMAGE_RA,		
    
    		ID_IMAGE_HISTOGRAM,		
    
    		ID_ZOOMOUT,
    
    		ID_ZOOMIN,
    
    };
    
    /////////////////////////////////////////////////////////////////////////////
    
    // 在ManiFram.cpp 中添加初始化菜单程序
    
    void CMainFrame::InitMenuImage()
    
    {
    
    	// 初始化菜单图像列表
    
    	CBitmap bm;	
    
    	
    
    	m_imageMenu.Create(20, 20, TRUE | ILC_COLOR24, 9, 0);
    
    	// 要问我IDB_SMALLMENUCOLOR是什么,当然是是真彩位图了,看图说话了
    
    	bm.LoadBitmap(IDB_SMALLMENUCOLOR);    
    
    	m_imageMenu.Add(&bm,(CBitmap*)NULL);
    
    	bm.Detach();
    
    	// 还有IDB_SMALLMENUDISABLE
    
    	m_imageMenuDisable.Create(20, 20, TRUE | ILC_COLOR24, 9, 0);
    
    	bm.LoadBitmap(IDB_SMALLMENUDISABLE);    
    
    	m_imageMenuDisable.Add(&bm,(CBitmap*)NULL);
    
    	bm.Detach();
    
    	// 还有IDB_SMALLMENUHOT
    
    	m_imageMenuHot.Create(20, 20, TRUE | ILC_COLOR24, 9, 0);
    
    	bm.LoadBitmap(IDB_SMALLMENUHOT);    
    
    	m_imageMenuHot.Add(&bm,(CBitmap*)NULL);
    
    	bm.Detach();	
    
    	
    
    }
    
    /*
    
    IDB_SMALLMENUCOLOR
     
    本文章更多内容<<上一页 - 1 - 2 - 3 - 4 - 5 - 下一页>>
相关文章

控件如何传递自定义struct
文件系统识别器
用 ATL ActiveX 绘制任意平面函数的曲线
软件框架的利器、TangramMini组件应用教程四
如何让一个打开的文档成为活动文档
消息值,托管字符串,扰乱代码及其它
修改一个完全颜色的CListCtrl类
编程之道
更新MFC中的视图,跟踪.NET Framework中的事
常用编码详解
VC 6.0 中如何使用 CRT 调试功能来检测内
软件开发专业相关的英文简历及其资源
定制调试诊断工具和实用程序——摆脱DLL“地
发掘 C# 特性赋予科学计算项目以威力
《系统飞狐》中获取系统信息的方法
使用 Http 在线自动升级程序
UTF-8与GB2312之间的互换
在VC中调用DirectShow全屏播放视频
案例研究:If-Trader 订单流程处理系统
介绍一个操作DHTML表格的C 对象

相关评论


本文章所属分类:首页 VC++

  热门关键字: