outlook导航界面效果 功能展示
如今上位机软件不但具有丰富功能,还有漂亮的界面,这样才能吸引用户。采用导航式功能菜单,不但美观大方,还为用户操作程序提供方便,这例程就实现了导航界面式菜单的功能,效果如图
18.上位机VC MFC实现outlook导航界面效果
要点提示 为设计OUTLOOK导航界面,需要从CListCtrl派生一个子类,实例 为COutLookList.在此类中显示些导航按钮,当用记单击这些按钮时,会适当调整按钮的位置,并在客户区域,显示另一个CListCtrl控件,实例 为m_ClientList,目的是显示与导航按钮关联的项目,在设计COutlookList类时,得解决三个关键问题 1.如何截获导航按钮的单击事件; 2.如何存储与导航按钮关联的项目; 3.如何向外界提供一个接口,方便处理用户双击视图项目项执行的动作 问题1,可以在COutLookList的OnCmdMsg方法中实现,代码如下 BOOL COutlookList::OnCmdMsg(UINT nID, int nCode, void*pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) { int index = CommandToIndex(nID); if (index != -1) { OnButtonDown(index,nID); } m_ClientList.OnCmdMsg(nID,nCode,pExtra,pHandlerInfo); returnCListCtrl::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo); } 在OnCmdMsg方法中首先调用 自定义的CommandToIndex方法获取命令对应的按钮索引,因为在追寻导航按钮时,会为按钮指定 ID,并将近包在含有m_pButton数组中,只要遍历按钮,执行自定义的OnButtonDown方法,重新排列按钮,在客户区域显示列表控件。 问题2,可以从Cbutton派生一个子类,例程为CListButton,在该类中定义一个字符串列表,m_ButtonItem,类型为CStringList,存储与导航按钮关联的项目文本 问题3,我们可以定义一个回调函数,实例为ItemDlbFun,代码如下 //定义双击列表视图项的回调函数 typedef void(ItemDlbFun)(const CListCtrl* pListCtrl,intnItemIndex); 然后在COutLookList类中定义一个ItemDlbFun函数指针pItemDLBFun,最后在COutLookListod r PreTranslateMessage方法中判断用户是否双击了视图项,如果是,则调用 pItemDlbFun 实现功能 我们在这里就来看下如何一步步实现导航菜单功能,主要演示如何使用我们集成类COutlookList 1.新建一个对话框程序 2.复制COutlookList类和CListButton类的文件,并在对话框中定义CImageList m_Imagelist;变量和双击处理函数 static voidOnItemDouble(const CListCtrl* pListCtrl,int nIndex); 3.添加列表控件,关关联变量COutlookList m_List; 4.在对话框中的OnInitialDlg()对两变量初始化 初始化主要代码 //创建图像列表,向图像列表中添加图标 m_Imagelist.Create(32,32,ILC_COLOR24|ILC_MASK,0,1); for (inti=0;i<6;i++) { m_Imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON1+i)); } //向列表视图控件中添加按钮 m_List.SetImageLists(&m_Imagelist); m_List.AddButton("基础资料管理",500); m_List.AddButton("销售组织",501); m_List.AddButton("市场管理",502); m_List.AddButton("销售业务管理",503); m_List.AddButton("销售分析",504); //向指定按钮添加关联的视图项 CString str; str = "市场反馈"; m_List.AddButtonItems(2,str); str = "市场跟踪"; m_List.AddButtonItems(2,str); str = "市场走势"; m_List.AddButtonItems(2,str); str = "市场行情"; m_List.AddButtonItems(2,str); m_List.pItemDlbFun= OnItemDouble;//设置回调函数 初始化主要代码 //创建图像列表,向图像列表中添加图标 m_Imagelist.Create(32,32,ILC_COLOR24|ILC_MASK,0,1); for (inti=0;i<6;i++) { m_Imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON1+i)); } //向列表视图控件中添加按钮 m_List.SetImageLists(&m_Imagelist); m_List.AddButton("基础资料管理",500); m_List.AddButton("销售组织",501); m_List.AddButton("市场管理",502); m_List.AddButton("销售业务管理",503); m_List.AddButton("销售分析",504); //向指定按钮添加关联的视图项 CString str; str = "市场反馈"; m_List.AddButtonItems(2,str); str = "市场跟踪"; m_List.AddButtonItems(2,str); str = "市场走势"; m_List.AddButtonItems(2,str); str = "市场行情"; m_List.AddButtonItems(2,str); m_List.pItemDlbFun= OnItemDouble;//设置回调函数 演示功能实现的整个过程 源码及视频下载 (仅在电脑可见)
|