CSDITrueColorTabs






1.50/5 (13投票s)
2003年6月29日

94632

1919
一个具有真彩色图标的选项卡控件,用于具有多个视图的SDI应用程序。
引言
我有一个SDI(单文档界面)应用程序,带有多个视图。我需要使用选项卡控件在这些视图之间进行切换,但没有找到任何示例。我找到了Christian Rodemeyer 的 CMDITabs,并花了我半个小时将其修改成这个类。我也喜欢Dany Cantin 的 CTrueColorToolBar,并且从该类中使用了实现真彩色位图的方法(SetTrueColorTabs
)。所以,这就是:你可以拥有多个视图并在它们之间切换,而无需使用CpropertySheet
或其他东西。
如何使用
它非常易于使用。你不需要更改应用程序架构中的任何内容。你需要将 SDITrueColorTabs.h 和 SDITrueColorTabs.cpp 添加到你的项目中。在你的 CmainFrame
类中添加一个新的成员 m_wndSDITabs
,其类型为 CSDITrueColorTabs
(不要忘记包含 SDITrueColorTabs.h)。
// MainFrm.h class CMainFrame : public CMDIFrameWnd { [...] CSDITrueColorTabs m_wndSDITabs; virtual void OnUpdateFrameTitle(BOOL bAddToTitle); [...] }; // MainFrm.cpp int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { [...] m_wndTabs.Create(this,MT_TOP | MT_IMAGES); //m_wndTabs.SetImageList(&m_ToolTipIcons1); m_wndTabs.ViewsList.AddTail(m_pView1); m_wndTabs.ViewsList.AddTail(m_pView2); m_wndTabs.TextLabels.AddTail("Contacte"); m_wndTabs.TextLabels.AddTail("Informatii"); m_wndTabs.LoadTrueColorTabs(26,IDB_TABS_ICONS); return 0; } void CMainFrame::OnUpdateFrameTitle(BOOL bAddToTitle) { CFrameWnd::OnUpdateFrameTitle(bAddToTitle); m_wndSDITabs.Update(); }
m_pView1
和 m_pView2
是指向你的视图的指针。
用于在视图之间切换的方法 SwitchView(viewNo)
在我的 app.cpp 中声明,如下所示
CView* CtestApp::SwitchView(int viewNo) { CView* pActiveView = ((CFrameWnd*) m_pMainWnd)->GetActiveView(); CView* pNewView= NULL; if ((viewNo == 1 && pActiveView == m_pView1) || (viewNo == 2 && pActiveView == m_pView2)) { return pNewView; } else { switch (viewNo) { case 1: pNewView = m_pView1; break; case 2: pNewView = m_pView2; break; } // Exchange view window IDs so RecalcLayout() works. #ifndef _WIN32 UINT temp = ::GetWindowWord(pActiveView->m_hWnd, GWW_ID); ::SetWindowWord(pActiveView->m_hWnd, GWW_ID, ::GetWindowWord(pNewView->m_hWnd, GWW_ID)); ::SetWindowWord(pNewView->m_hWnd, GWW_ID, temp); #else UINT temp = ::GetWindowLong(pActiveView->m_hWnd, GWL_ID); ::SetWindowLong(pActiveView->m_hWnd, GWL_ID, ::GetWindowLong(pNewView->m_hWnd, GWL_ID)); ::SetWindowLong(pNewView->m_hWnd, GWL_ID, temp); #endif pActiveView->ShowWindow(SW_HIDE); pNewView->ShowWindow(SW_SHOW); ((CFrameWnd*) m_pMainWnd)->SetActiveView(pNewView); ((CFrameWnd*) m_pMainWnd)->RecalcLayout(); pNewView->Invalidate(); return pActiveView; } }
有关更多信息,请阅读 CTrueColorToolBar 和 CMDITabs。
玩得开心!