这样的话,首先获取iframe外面的Ext
var myExt = top.Ext
var tabs = myExt.getCmp("你的Tabpanel id")//获取TabPanel
给你的“新增用户”添加onclick="javascript:addTab()"来触发下面的这个函数,
这个函数中则进行了添加新页签(且先判断了是否已存在该页签)
function addTab(){
var addUserPanel = tabs.getComponent(“addUser”)
if(!addUserPanel ){//先判断你需要打开的tab页是否已经打开
addUserPanel = new Ext.Panel({
id : “addUser”,
title : “新增用户",
iconCls: 'tabs',
tabTip : "新增用户",
closable : true,
html : "新增用户界面"
})
tabs.add(addUserPanel )
}
tabs.setActiveTab(addUserPanel )
}
Tab Control是一个标签控件,只有标签,标签下面的窗体要你自己创建的子窗体、并通过回调、或者消息的方式来实现隐藏、显示,从而实现标签+显示选中的子窗体的效果。MFC使用CTabCtrl进行封装,大致的流程是
1.创建TabCtrl
2.通过InsertItem方法添加页签
3.创建子窗体,指定这些窗体的父窗体为 上面创建的TabCtrl
4.在TabCtrl的父窗体类 或者 TabCtrl的继承类中 添加ON_NOTIFY响应消息, OnSize消息
5.实现消息响应函数
参考代码:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
... ...
int nCtrlID = 1, nTabIndex = 0
if ( !m_wndTab.Create( TCS_FOCUSNEVER|WS_VISIBLE|TCS_RIGHTJUSTIFY, CRect( 0, 0, 0, 0 ), &m_wndView, nCtrlID++ ) )
{
TRACE0("Failed to create m_wndTab \n")
return -1
}
CFont tabFont
tabFont.CreateFont(12,0,0,0,FW_NORMAL,0,0,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,
"宋体")
m_wndTab.SetFont(&tabFont,true)
tabFont.Detach()
m_wndTab.InsertItem( nTabIndex++, "错误" )
if ( !m_wndErrEvent.Create( WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_NOSORTHEADER, CRect( 0, 0, 0, 0 ), &m_wndTab, nCtrlID++ ) )
{
TRACE0("Failed to create m_wndErrEvent \n")
return -1
}
m_wndErrEvent.SetExtendedStyle( LVS_EX_FULLROWSELECT )
m_wndErrEvent.InsertColumn( 0, "时间" )
m_wndErrEvent.InsertColumn( 1, "错误事件" )
m_wndErrEvent.ShowWindow( SW_SHOW )
m_wndTab.InsertItem( nTabIndex++, "调试" )
if ( !m_wndDebugEvent.Create( WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_NOSORTHEADER, CRect( 0, 0, 0, 0 ), &m_wndTab, nCtrlID++ ) )
{
TRACE0("Failed to create m_wndDebugEvent \n")
return -1
}
m_wndDebugEvent.SetExtendedStyle( LVS_EX_FULLROWSELECT )
m_wndDebugEvent.InsertColumn( 0, "时间" )
m_wndDebugEvent.InsertColumn( 1, "调试事件" )
m_wndErrEvent.ShowWindow( SW_HIDE )
m_wndDebugEvent.ShowWindow( SW_SHOW )
m_wndTab.SetCurSel( m_wndTab.GetItemCount() - 1 )
}
ChildView.h:
//{{AFX_MSG(CChildView)
afx_msg void OnPaint()
afx_msg void OnSize(UINT nType, int cx, int cy)
//}}AFX_MSG
afx_msg void OnSelChangeTab(NMHDR *pNotify,LRESULT *pResult)
DECLARE_MESSAGE_MAP()
ChildView.cpp:
BEGIN_MESSAGE_MAP(CChildView,CWnd )
//{{AFX_MSG_MAP(CChildView)
ON_WM_PAINT()
ON_WM_SIZE()
//}}AFX_MSG_MAP
ON_NOTIFY(TCN_SELCHANGE,1,OnSelChangeTab)
END_MESSAGE_MAP()
void CChildView::OnSize(UINT nType, int cx, int cy)
{
CWnd ::OnSize(nType, cx, cy)
if (IsWindow(((CMainFrame*)theApp.m_pMainWnd)->m_wndTab.m_hWnd))
{
CRect viewRect
this->GetClientRect(viewRect)
((CMainFrame*)theApp.m_pMainWnd)->m_wndTab.MoveWindow(viewRect)
CRect tabRect
((CMainFrame*)theApp.m_pMainWnd)->m_wndTab.GetClientRect(tabRect)
((CMainFrame*)theApp.m_pMainWnd)->m_wndTab.AdjustRect(FALSE,tabRect)
if (IsWindow(((CMainFrame*)theApp.m_pMainWnd)->m_wndDebugEvent.m_hWnd))
{
((CMainFrame*)theApp.m_pMainWnd)->m_wndDebugEvent.MoveWindow(tabRect)
}
if (IsWindow(((CMainFrame*)theApp.m_pMainWnd)->m_wndErrEvent.m_hWnd))
{
((CMainFrame*)theApp.m_pMainWnd)->m_wndErrEvent.MoveWindow(tabRect)
}
for ( int i = 0i <2i++ )
{
((CMainFrame*)theApp.m_pMainWnd)->m_wndDebugEvent.SetColumnWidth( i, LVSCW_AUTOSIZE_USEHEADER )
((CMainFrame*)theApp.m_pMainWnd)->m_wndErrEvent.SetColumnWidth( i, LVSCW_AUTOSIZE_USEHEADER )
}
}
}
void CChildView::OnSelChangeTab(NMHDR *pNotify,LRESULT *pResult)
{
int cursel=((CMainFrame*)theApp.m_pMainWnd)->m_wndTab.GetCurSel()
if ( cursel == ((CMainFrame*)theApp.m_pMainWnd)->m_wndTab.GetItemCount() - 1 )
{
((CMainFrame*)theApp.m_pMainWnd)->m_wndDebugEvent.ShowWindow(SW_SHOW)
((CMainFrame*)theApp.m_pMainWnd)->m_wndErrEvent.ShowWindow(SW_HIDE)
}
else if ( cursel == 0 )
{
((CMainFrame*)theApp.m_pMainWnd)->m_wndDebugEvent.ShowWindow(SW_HIDE)
((CMainFrame*)theApp.m_pMainWnd)->m_wndErrEvent.ShowWindow(SW_SHOW)
}
}
动态tab页签获取ref问题是一个比较复杂的问题,需要使用JavaScript来实现。首先,要在每个tab页签上添加一个ref属性,以便在页面加载时获取它们。然后,使用JavaScript来监听tab页签的点击事件,当用户点击某个tab页签时,就可以通过ref属性获取到它的值。最后,根据获取的值来进行相应的处理即可。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)