在MDI程序中实现类似WPS2000的文件切换标签

ww美丽心情ww

ww美丽心情ww

2016-01-29 12:07

在MDI程序中实现类似WPS2000的文件切换标签,在MDI程序中实现类似WPS2000的文件切换标签

在MDI程序中实现类似WPS2000的文件切换标签


作者:山西大同 张聪

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/cyuyanjiaocheng/)


下载源代码

    用过WPS2000的朋友,肯定对其文件切换功能有很深的印象。当打开多个文件时,他可以使我们快速的切换到指定的文件。本文将详细地说明如何在自己的MDI程序中加入这样一个标签。 图一是本文例子程序运行画面。


图一 例子程序运行画面

开始之前,我们先对WPS2000中的文件切换标签做简单分析,这是一个Tab标签,该标签具有以下功能: 1、当鼠标移到Tab标签上时,对应的文字将变为蓝色; 2、新建或打开一个文件时,Tab标签会以文件标题为标签文本自动加入一项; 3、切换Tab标签时,对应的文件窗口会跟着切换; 4、当我们激活不同的文件窗口时,Tab标签会自动切换; 5、关闭一个文件窗口时,Tab标签中对应的项会自动消失。 在本文的例子中,除实现上述功能外,还作如下修改: 1、增加双击Tab标签时最大化、恢复子窗口功能; 2、修改Tab标签为按钮风格。 具体思路:
    在MDI程序中加入一个包含Tab标签的对话框条,并加入类CViewManager,该类用一个指针数组存放所有打开子窗口的视指针,用一个字符串数组存放文档标题。在视类的初始化函数OnInitUpdate() 里取得视指针及文档标题,存放到CViewManager的数组中,并在Tab标签中加入一项。在视类的析构函数里从Tab标签和CViewManager的数组中删除对应的项。切换Tab标签时,取得对应子窗口的指针,并以该指针为参数调用CMDIFrameWnd::MDIActivate()激活这个子窗口。下面请看具体的实现步骤:

一、在VC6.0中,用向导创建一个MDI工程TabMDIDemo。在向导各步中均采用默认项

二、为工程加入Tab标签对话框条

1、在工作区的ResourceView中加入一个对话框模板IDD_TAB_DLG_BAR,按如下设置:

    Style: Child    Border: Thin    去掉标题条和系统菜单选项;    字体:宋体,字号:10    
在模板中加入一个Tab标签控件IDC_TAB,按如下设置:
    选中按钮选项。//这使的Tab标签呈现按钮风格    选中Hot Track选项。//这使得鼠标移上时文字变蓝
仔细调整对话框条及Tab控件的位置、尺寸。创建主框架时,将以该模板创建出Tab标签对话框条。
2、利用类向导加入类CMyTab,派生于CTabCtrl。
3、利用类向导为类CMyTab添加TCN_SELCHANGE通知消息映射函数,实现文件切换,编辑如下:
void CMyTab::OnSelchange(NMHDR* pNMHDR, LRESULT* pResult) {     // TODO: Add your control notification handler code hereint idx = GetCurSel();TC_ITEM ti;ti.mask = TCIF_PARAM;GetItem(idx, &ti);CView * pView = (CView *) ti.lParam;((CMDIFrameWnd *)AfxGetMainWnd())-MDIActivate((pView-GetParent())-GetParent());*pResult = 0;*pResult = 0;}
4、利用类向导为类CMyTab添加WM_LBUTTONDBLCLK消息映射函数,实现双击时最大化或恢复子窗口,编辑如下:
void CMyTab::OnLButtonDblClk(UINT nFlags, CPoint point) {    // TODO: Add your message handler code here and/or call default    int idx = GetCurSel();    TC_ITEM ti;    ti.mask = TCIF_PARAM;    GetItem(idx, &ti);    CView * pView = (CView *) ti.lParam;    ((CMDIFrameWnd *)AfxGetMainWnd())-MDIActivate((pView-GetParent())-GetParent());    // maximize or restore MDIChild window based on its current state    BOOL bMaximize=FALSE;    CWnd* pActiveWnd=((CMDIFrameWnd *)AfxGetMainWnd())-MDIGetActive(&bMaximize);    if(bMaximize)((CMDIFrameWnd *)AfxGetMainWnd())-MDIRestore(pActiveWnd);    else((CMDIFrameWnd *)AfxGetMainWnd())-MDIMaximize(pActiveWnd);}   
5、在MainFrm.h中加入:#include "MyTab.h"
6、为主框架类CMainFrame加入如下成员变量:
protected:  CDialogBar m_wndTabBar;public:CMyTab m_MyTab;  
7、在菜单资源"查看"中加入菜单项"文件切换",ID值为ID_VIEW_T
展开更多 50%)
分享

猜你喜欢

在MDI程序中实现类似WPS2000的文件切换标签

C语言教程 C语言函数
在MDI程序中实现类似WPS2000的文件切换标签

WPS2000中实现立体字效果

办公软件
WPS2000中实现立体字效果

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

如何在WPS2000中插入AutoCad图形文件

办公软件
如何在WPS2000中插入AutoCad图形文件

在WPS2000中使用图文符号库的技巧

办公软件
在WPS2000中使用图文符号库的技巧

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

WPS2000如何快速排版

电脑入门
WPS2000如何快速排版

在EVC3.0中创建MDI程序

C语言教程 C语言函数
在EVC3.0中创建MDI程序

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

css新手上路(6)

css新手上路(6)

全面剖析VB.NET(3)

全面剖析VB.NET(3)
下拉加载更多内容 ↓