在MDI程序中实现类似WPS2000的文件切换标签
2010-06-15 20:40:03 来源:WEB开发网7、在菜单资源"查看"中加入菜单项"文件切换",ID值为ID_VIEW_TAB_BAR。在MainFrm.cpp中消息映射部分加入以下两行:
ON_COMMAND_EX(ID_VIEW_TAB_BAR, OnBarCheck)
ON_UPDATE_COMMAND_UI(ID_VIEW_TAB_BAR, OnUpdateControlBarMenu)
8、在CMainFrame::OnCreate()加入以下代码:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
//向导生成代码略去
//创建TAB条
if (!m_wndTabBar.Create(this, IDD_TAB_DLG_BAR,
CBRS_TOP | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE,
ID_VIEW_TAB_BAR)) //ID_VIEW_TAB_BAR是菜单命令ID,用于显示或隐藏对话框条
{
TRACE0("Failed to create dialog bar m_wndDialogbar\n");
return -1; // fail to create
}
//m_wndTabBar.EnableDocking(CBRS_ALIGN_LEFT | CBRS_ALIGN_RIGHT);
//EnableDocking(CBRS_ALIGN_ANY);
//DockControlBar(&m_wndTabBar);
//将m_MyTab与控件IDC_TAB绑定
m_MyTab.SubclassDlgItem(IDC_TAB, &m_wndTabBar);
return 0;
}
9、为类CMainFrame添加WM_SIZE消息映射函数,如下:
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CMDIFrameWnd::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
CRect rcClient;
GetClientRect(&rcClient);
int left,top,right,bottom;
left=rcClient.left;
top=rcClient.top;
right=rcClient.right;
bottom=rcClient.bottom;
m_wndTabBar.MoveWindow(left,top+24,right-left,24,TRUE);
CRect rcTab;
m_wndTabBar.GetClientRect(&rcTab);
CTabCtrl *pMyTab=(CTabCtrl *)(m_wndTabBar.GetDlgItem(IDC_TAB));
pMyTab->MoveWindow(rcTab,TRUE);
}
三、手工创建类CViewManager
新建两个文件ViewManager.h、ViewManager.cpp ,并添加到当前工程。类的源码参见本文所附例子。下面对其成员作简单说明:
OnActivateView(); //当一个视被激活时,该函数被调用,刷新Tab控件
GetWindowNum(); //返回打开的子窗口数
RemoveAll(); //清空数组arViews、arViewTitles
RemoveView(); //用于在数组及Tab控件中删除一项
AddView(); //用于在数组及Tab控件中加入一项
CViewManager(); //构造函数
~CViewManager(); //析构函数,清空数组arViews、arViewTitles
CPtrArray arViews; //用来存放子窗口的视指针
CstringArray arViewTitles; //用来存放文档标题
bool bClosing; //用于表示程序是否正在关闭
更多精彩
赞助商链接