65.9K
CodeProject 正在变化。 阅读更多。
Home

CSDITrueColorTabs

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.50/5 (13投票s)

2003年6月29日

viewsIcon

94632

downloadIcon

1919

一个具有真彩色图标的选项卡控件,用于具有多个视图的SDI应用程序。

Sample Image - CSDITrueColorTabs.jpg

引言

我有一个SDI(单文档界面)应用程序,带有多个视图。我需要使用选项卡控件在这些视图之间进行切换,但没有找到任何示例。我找到了Christian Rodemeyer 的 CMDITabs,并花了我半个小时将其修改成这个类。我也喜欢Dany Cantin 的 CTrueColorToolBar,并且从该类中使用了实现真彩色位图的方法(SetTrueColorTabs)。所以,这就是:你可以拥有多个视图并在它们之间切换,而无需使用CpropertySheet 或其他东西。

如何使用

它非常易于使用。你不需要更改应用程序架构中的任何内容。你需要将 SDITrueColorTabs.hSDITrueColorTabs.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_pView1m_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;
   }
}

有关更多信息,请阅读 CTrueColorToolBarCMDITabs

玩得开心!

© . All rights reserved.