三、实现方法
有了以上的强有力的武器,就可以对我们的程序下手了:)在MDI或SDI中使用CMenuEx的时候需要修改以下地方。
- 先将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; // 菜单项被选中时的图像列表
...
}
- 撰写菜单图像索引表,初始化菜单程序,初始化菜单图像列表程序, 和两个重要的消息映射函数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 - 下一页>> |