Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. How to add tabs to CView Class?

How to add tabs to CView Class?

Scheduled Pinned Locked Moved C / C++ / MFC
c++tutorialquestion
31 Posts 4 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • _ _Flaviu

    First of all, create an CTabbedView derived from CTabView.

    class CTabbedView : public CTabView
    {
    protected: // create from serialization only
    CTabbedView();
    DECLARE_DYNCREATE(CTabbedView)
    ...
    };

    Then, in OnCreate:

    int CTabbedView::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    if (CTabView::OnCreate(lpCreateStruct) == -1)
    return -1;

    m\_wndTabs.DestroyWindow();
    if (! m\_wndTabs.Create(CMFCTabCtrl::STYLE\_3D, CRect(0, 0, 0, 0), this, 1, CMFCTabCtrl::LOCATION\_BOTTOM))
    {
    	TRACE(\_T("Failed to create output tab window\\n"));
    	return -1;
    }
    
    m\_wndTabs.SetFlatFrame();
    m\_wndTabs.SetTabBorderSize(0);
    m\_wndTabs.AutoDestroyWindow(TRUE);
    
    AddView(RUNTIME\_CLASS(CYourView1), \_T("Title 1"));
    AddView(RUNTIME\_CLASS(CYourView2), \_T("Title 2"));
    
    return 0;
    

    }

    and in your childframe, where you create the view inside your splitter, you can put this CTabbedView as any CView:

    if(! m\_wndSplitterTab.CreateView(1, 0, RUNTIME\_CLASS(CTabbedView), CSize(0, 0), pContext))
    {
    	m\_wndSplitterTab.DestroyWindow();
    	return FALSE;
    }
    

    Tell me if is not clear.

    S Offline
    S Offline
    Sampath579
    wrote on last edited by
    #22

    In above provided sample code, i have some doubts. When i created a class CTabbedView which is inherited from CTabView, in OnCreate(), the below call it self created a tab control (horizontal splitter) without any tabs.

    if (CTabView::OnCreate(lpCreateStruct) == -1)
    return -1;

    Then what is the use of below call?

    if (!m_tab.Create(CMFCTabCtrl::STYLE_3D, CRect(0, 0, 500, 100), this, 1, CMFCTabCtrl::LOCATION_BOTTOM))
    {
    TRACE(_T("Failed to create output tab window\n"));
    return -1;
    }

    What is the exact difference between AddTab and AddView.?

    _ 1 Reply Last reply
    0
    • S Sampath579

      In above provided sample code, i have some doubts. When i created a class CTabbedView which is inherited from CTabView, in OnCreate(), the below call it self created a tab control (horizontal splitter) without any tabs.

      if (CTabView::OnCreate(lpCreateStruct) == -1)
      return -1;

      Then what is the use of below call?

      if (!m_tab.Create(CMFCTabCtrl::STYLE_3D, CRect(0, 0, 500, 100), this, 1, CMFCTabCtrl::LOCATION_BOTTOM))
      {
      TRACE(_T("Failed to create output tab window\n"));
      return -1;
      }

      What is the exact difference between AddTab and AddView.?

      _ Offline
      _ Offline
      _Flaviu
      wrote on last edited by
      #23

      AddTab call is creating the tab area: "Call this method to add a pane as a new tab on a tabbed pane" CBaseTabbedPane Class[^] and AddView call is creating the view which are hosted by CTabView: "Call this function to add a view to the tab control that is embedded in a frame" CTabView Class[^]

      S 2 Replies Last reply
      0
      • _ _Flaviu

        AddTab call is creating the tab area: "Call this method to add a pane as a new tab on a tabbed pane" CBaseTabbedPane Class[^] and AddView call is creating the view which are hosted by CTabView: "Call this function to add a view to the tab control that is embedded in a frame" CTabView Class[^]

        S Offline
        S Offline
        Sampath579
        wrote on last edited by
        #24

        In my case, i need to create tabs dynamically. Lets say. When my application starts user will input a value between 1 to 10. Based on user input i need to create the tabs (no. of tabs). later in each tab in need to display different images. In this case, should i create my class which is inheriting from CTabView or CTabPane?

        _ 1 Reply Last reply
        0
        • S Sampath579

          In my case, i need to create tabs dynamically. Lets say. When my application starts user will input a value between 1 to 10. Based on user input i need to create the tabs (no. of tabs). later in each tab in need to display different images. In this case, should i create my class which is inheriting from CTabView or CTabPane?

          _ Offline
          _ Offline
          _Flaviu
          wrote on last edited by
          #25

          " should i create my class which is inheriting from CTabView or CTabPane?" Definitely from CTabView. And this CMyTabClass, should include at least one tab, with one view.

          S 1 Reply Last reply
          0
          • _ _Flaviu

            " should i create my class which is inheriting from CTabView or CTabPane?" Definitely from CTabView. And this CMyTabClass, should include at least one tab, with one view.

            S Offline
            S Offline
            Sampath579
            wrote on last edited by
            #26

            If i call AddView(), this itself is creating a tab. Is this not enough? No need to call AddTab() right?

            _ 1 Reply Last reply
            0
            • S Sampath579

              If i call AddView(), this itself is creating a tab. Is this not enough? No need to call AddTab() right?

              _ Offline
              _ Offline
              _Flaviu
              wrote on last edited by
              #27

              Yes, AddView() is creating a tab, so, it is enough.

              1 Reply Last reply
              0
              • _ _Flaviu

                Dear member, in order to read easily, please format your code (use "code" button from above edit area). And, yes, m_tab.Create(...) return TRUE, but further more, you do nothing ...

                S Offline
                S Offline
                Sampath579
                wrote on last edited by
                #28

                If i call AddView() and run my program, it working absolutely fine with a window and a view(tab). But instead of calling AddView() initially, at runtime i based on user input, i called addview() which leads to a crash. What could be the reason.

                class View : public CScrollView
                {

                }

                //below is my main class
                class MyTabClass : public CTabView
                {
                //this function gets called automatically during creation of window.
                void OnCreate(LPCREATESTRUCT lpCreateStruct)
                {
                if (CTabView::OnCreate(lpCreateStruct) == -1)
                return -1;
                AddView(RUNTIME_CLASS(View),_T("Sheet1")); //this works fine.
                }

                //this function i will call based on user input and hence its crashing during addView call.
                void RunTimeBasedOnUserInput()
                {
                	for(int i = 0 ; i < userinput; i++)
                	{
                		AddView(RUNTIME\_CLASS(View),\_T("sheet %d",i));
                	}
                
                }
                

                }

                After investigation, what i found is, During creation of window itself, OnInitUpdate function in class View is getting called each time when AddView() is called. But if i create the views dynamically, then AddView() wont call OnInitUpdate of my View class and hence the crash occurs. Exception as follows: --------------------------- Microsoft Visual C++ Runtime Library --------------------------- Debug Assertion Failed! Program: C:\Windows\SYSTEM32\mfc140d.dll File: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\afxtabview.cpp Line: 102 For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts. (Press Retry to debug the application) --------------------------- Abort Retry Ignore --------------------------- Can you let me know how to get rid of this problem?

                1 Reply Last reply
                0
                • _ _Flaviu

                  Dear member, in order to read easily, please format your code (use "code" button from above edit area). And, yes, m_tab.Create(...) return TRUE, but further more, you do nothing ...

                  S Offline
                  S Offline
                  Sampath579
                  wrote on last edited by
                  #29

                  If i call AddView() and run my program, its working absolutely fine with a window and a view(tab). But instead of calling AddView() initially, at runtime based on user input, i called addview() which leads to a crash. What could be the reason.

                  class View : public CScrollView
                  {

                  }

                  //below is my main class
                  class MyTabClass : public CTabView
                  {
                  //this function gets called automatically during creation of window.
                  void OnCreate(LPCREATESTRUCT lpCreateStruct)
                  {
                  if (CTabView::OnCreate(lpCreateStruct) == -1)
                  return -1;
                  AddView(RUNTIME_CLASS(View),_T("Sheet1")); //this works fine.
                  }

                  //this function i will call based on user input and hence its crashing during addView call.
                  void RunTimeBasedOnUserInput()
                  {
                  	for(int i = 0 ; i < userinput; i++)
                  	{
                  		AddView(RUNTIME\_CLASS(View),\_T("sheet %d",i));
                  	}
                  
                  }
                  

                  }

                  1 Reply Last reply
                  0
                  • _ _Flaviu

                    AddTab call is creating the tab area: "Call this method to add a pane as a new tab on a tabbed pane" CBaseTabbedPane Class[^] and AddView call is creating the view which are hosted by CTabView: "Call this function to add a view to the tab control that is embedded in a frame" CTabView Class[^]

                    S Offline
                    S Offline
                    Sampath579
                    wrote on last edited by
                    #30

                    If i call AddView() and run my program, its working absolutely fine with a window and a view(tab). But instead of calling AddView() initially, at runtime based on user input, i called addview() which leads to a crash. What could be the reason.

                    class View : public CScrollView
                    {

                    }

                    //below is my main class
                    class MyTabClass : public CTabView
                    {
                    //this function gets called automatically during creation of window.
                    void OnCreate(LPCREATESTRUCT lpCreateStruct)
                    {
                    if (CTabView::OnCreate(lpCreateStruct) == -1)
                    return -1;
                    AddView(RUNTIME_CLASS(View),_T("Sheet1")); //this works fine.
                    }

                    //this function i will call based on user input and hence its crashing during addView call.
                    void RunTimeBasedOnUserInput()
                    {
                    	for(int i = 0 ; i < userinput; i++)
                    	{
                    		AddView(RUNTIME\_CLASS(View),\_T("sheet %d",i));
                    	}
                    
                    }
                    

                    }

                    _ 1 Reply Last reply
                    0
                    • S Sampath579

                      If i call AddView() and run my program, its working absolutely fine with a window and a view(tab). But instead of calling AddView() initially, at runtime based on user input, i called addview() which leads to a crash. What could be the reason.

                      class View : public CScrollView
                      {

                      }

                      //below is my main class
                      class MyTabClass : public CTabView
                      {
                      //this function gets called automatically during creation of window.
                      void OnCreate(LPCREATESTRUCT lpCreateStruct)
                      {
                      if (CTabView::OnCreate(lpCreateStruct) == -1)
                      return -1;
                      AddView(RUNTIME_CLASS(View),_T("Sheet1")); //this works fine.
                      }

                      //this function i will call based on user input and hence its crashing during addView call.
                      void RunTimeBasedOnUserInput()
                      {
                      	for(int i = 0 ; i < userinput; i++)
                      	{
                      		AddView(RUNTIME\_CLASS(View),\_T("sheet %d",i));
                      	}
                      
                      }
                      

                      }

                      _ Offline
                      _ Offline
                      _Flaviu
                      wrote on last edited by
                      #31

                      Hi. Have you solved this ?

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • World
                      • Users
                      • Groups