vc tab控件的使用_第1頁
vc tab控件的使用_第2頁
vc tab控件的使用_第3頁
vc tab控件的使用_第4頁
vc tab控件的使用_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、vc6.0 tab控件的使用 MFC中使用TAB Control控件(轉(zhuǎn))     假如我現(xiàn)在有個SDI程序,View是Form View,想在上面放個Tab Control,包含兩個Page?,F(xiàn)在讓我們來看看應(yīng)該怎樣處理。首先當(dāng)然要增加一個Tab Control資源,然后利用Class Wizard,在View中增加一個Control變量。接著建立兩個對話框資源,別忘了把Style改為Child,Border改為None。然后就可以在上面加其他控件了。接著利用Class Wizard,分別為這兩個對話框建立兩個類,比如CPage1和CPage2。然后在View類

2、頭文件中,加入這兩個對話框?qū)ο?。同時增加一個變量int m_CurSelTab,用了表明是哪個Page即將被切換。為了避免用戶在切換Tab時,程序?qū)ab Index的枚舉,可以利用數(shù)組來做這個事情。在View的初始化函數(shù)中需要把CPage1、CPage2和Tab Control關(guān)聯(lián)起來,并保存頁面地址,設(shè)置初始頁面,等等。void CTab_testView:OnInitialUpdate()    CFormView:OnInitialUpdate();    GetParentFrame()->RecalcLayout()

3、;    ResizeParentToFit();          /為Tab Control增加兩個頁面     m_tab.InsertItem(0, _T("First");     m_tab.InsertItem(1, _T("Second");         /創(chuàng)建兩個對話框

4、0;    m_page1.Create(IDD_DIALOG1, &m_tab);     m_page2.Create(IDD_DIALOG2, &m_tab);     /設(shè)定在Tab內(nèi)顯示的范圍     CRect rc;     m_tab.GetClientRect(rc);     rc.top += 20;  

5、60;  rc.bottom -= 8;     rc.left += 8;     rc.right -= 8;     m_page1.MoveWindow(&rc);     m_page2.MoveWindow(&rc);     /把對話框?qū)ο笾羔槺4嫫饋?#160;    pDialog0 = &m_page1; 

6、;    pDialog1 = &m_page2;     /顯示初始頁面     pDialog0->ShowWindow(SW_SHOW);     pDialog1->ShowWindow(SW_HIDE);     /保存當(dāng)前選擇     m_CurSelTab = 0;這里面需要注意的是,我用了一個CDialog指針數(shù)組來進行保存,數(shù)組的

7、大小是Tab Control頁面的個數(shù),數(shù)組下標(biāo)對應(yīng)著每個頁面的索引(這樣方便快速存?。S脩羟袚Q時,需要響應(yīng)相關(guān)的消息。void CTab_testView:OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult) / TODO: Add your control notification handler code here         pDialogm_CurSelTab->ShowWindow(SW_HIDE);     m_Cu

8、rSelTab = m_tab.GetCurSel();     pDialogm_CurSelTab->ShowWindow(SW_SHOW);*pResult = 0;首先我們先把當(dāng)前的頁面隱藏起來,然后得到新的頁面索引,最后就把相關(guān)頁面顯示出來即可。這比一個個去枚舉簡單多了。還有一點比較有意思,那就是DDX/DDV機制的運用。要想獲得Tab Control各個頁面的數(shù)據(jù),可以利用DDX/DDV機制,但需要注意,因為這是多個頁面,所以需要顯式調(diào)用多次。void CTab_testView:OnButton1() / TODO: Add your

9、 control notification handler code here     m_page1.UpdateData();     m_page2.UpdateData();     CString str1 = m_page1.m_str1;     CString str2 = m_page2.m_str2;     AfxMessageBox(str1);  &#

10、160;  AfxMessageBox(str2);經(jīng)過這幾步處理,基本上我們就可以利用Tab Control的強大功能了。VC之TAB 控件實例對于用慣了VB和VC#的我來說,VC控件真是太麻煩了,不過有什么辦法呢?許多企業(yè)還在使用,所以繼續(xù)學(xué)習(xí),咸淡算扯到這了,這里做了個最為簡單的Tab Control 的使用范例。 1. 在主面板上拖放一Tab Control控件,我們這里建立其在主面板類(CTabSampleDlg)里面的成員變量m_tab。2.添加兩個子對話框,將其屬性設(shè)置為“child,none”。這里要注意了,添加的必須是繼承自DIALOG類的對話框,而不是PropPa

11、ge對話框,否則的話,子面板將不能響應(yīng)用戶操作。然后生成兩個新類“CTabPage1, CTabPage2”。3.為CTabSampleDlg類 添加兩個成員變量,他們分別是CTabPage1和CTabPage2類的實例。4.在CTabSampleDlg類的OnInitDialog成員函數(shù)內(nèi)的適當(dāng)位置添加如下代碼。BOOL CTabSampleDlg:OnInitDialog()CDialog:OnInitDialog();/ Add "About." menu item to system menu./ IDM_ABOUTBOX must be in the system

12、 command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL)   CString strAboutMenu;   strAboutMenu.LoadString(IDS_ABOUTBOX);   if (!strAboutMenu.IsEmpty()   

13、0;   pSysMenu->AppendMenu(MF_SEPARATOR);    pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);   / Set the icon for this dialog. The framework does this automatically/ when the application's main window is not a dialogSetIcon(m_hIcon, TRUE);

14、0;   / Set big iconSetIcon(m_hIcon, FALSE);   / Set small icon/=/初始化TABTCITEM tc1,tc2;tc1.mask = TCIF_TEXT;tc1.pszText = "第一頁"tc2.mask = TCIF_TEXT;tc2.pszText = "第二頁"m_tab.InsertItem(0, &tc1);m_tab.InsertItem(1, &tc2); /到這里只是添加了兩個tab頁CRect rec;m_tab.Ge

15、tClientRect(&rec);/獲得TAB控件的坐標(biāo)/定位選項卡頁的位置,這里可以根據(jù)情況自己調(diào)節(jié)偏移量rec.bottom -= 1;rec.left += 1;rec.top += 20;rec.right -= 2;/創(chuàng)建子頁面m_page1.Create(IDD_DIALOG1, GetDlgItem(IDC_TAB);m_page2.Create(IDD_DIALOG2, GetDlgItem(IDC_TAB);/將子頁面移動到指定的位置m_page1.MoveWindow(&rec);m_page2.MoveWindow(&rec);/顯示子頁面m_p

16、age1.ShowWindow(SW_SHOW);m_page2.ShowWindow(SW_HIDE);/=return TRUE; / return TRUE unless you set the focus to a control5. 為主面板上的TabControl 控件添加 OnSelchangeTab 事件, 添加代碼如下。void CTabSampleDlg:OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult) / TODO: Add your control notification handler code here &#

17、160;  switch (m_tab.GetCurSel()          case 0:            m_page1.ShowWindow(SW_SHOW);            m_page2.ShowWindow(SW_HIDE);   

18、;         break;       case 1:            m_page1.ShowWindow(SW_HIDE);            m_page2.ShowWindow(SW_SHOW); 

19、0;          break;      default:            break;    *pResult = 0;Tab Control控件的應(yīng)用前幾天在網(wǎng)上搜了點資料,是關(guān)于Tab Control控件的應(yīng)用,當(dāng)時還做了一遍,今天再做有點生疏了,總是忘了點什么。于是總結(jié)在這兒,一是為以后使用提供方便

20、,再是供大家參考。首先,新建一個基于對話框的MFC應(yīng)用程序,添加Tab Control控件,并為其添加變量CTabCtrl m_tab;然后,新建兩個對話框,均設(shè)置屬性如下(這步很重要):Style-Child,Border-None;然后分別添加一個文本框。分別為這兩個對話框建立新類CPage1和CPage2。該程序用了一個CDialog的指針數(shù)組來進行保存各個頁面,數(shù)組的大小是Tab Control頁面的個數(shù),數(shù)組下標(biāo)對應(yīng)著每個頁面的索引(這樣方便快速存?。?。 聲明變量:CDialog *pDialog2,并且添加一個int型變量用于保存當(dāng)前活動的頁面索引,int m_CurSelTab;

21、接著,在OnInitDialog函數(shù)中添加如下代碼:    /為Tab Control增加兩個頁面    m_tab.InsertItem(0, _T("First");    m_tab.InsertItem(1, _T("Second");    /創(chuàng)建兩個對話框    m_page1.Create(IDD_DIALOG1, &m_tab);    m_page2.

22、Create(IDD_DIALOG2, &m_tab);    /設(shè)定在Tab內(nèi)顯示的范圍    CRect rc;    m_tab.GetClientRect(rc);    rc.top += 20;    rc.bottom -= 8;    rc.left += 8;    rc.right -= 8;    m_page1.MoveWin

23、dow(&rc);    m_page2.MoveWindow(&rc);    /用數(shù)組把對話框?qū)ο笾羔槺4嫫饋?#160;   pDialog0 = &m_page1;    pDialog1 = &m_page2;    /顯示初始頁面    pDialog0->ShowWindow(SW_SHOW);    pDialog1->ShowWindo

24、w(SW_HIDE);    /保存當(dāng)前選擇    m_CurSelTab = 0;這樣就可進行正常的顯示了,如果響應(yīng)頁面切換這個事件,可以為Tab Control控件添加消息響應(yīng)函數(shù):OnSelchangeTab,并在該函數(shù)中添加如下代碼:   /得到頁面的數(shù)據(jù)    CString str;    if(m_CurSelTab=0)           

25、 m_page1.UpdateData(TRUE);         m_page1.GetDlgItem(IDC_EDIT_PAGE1)->GetWindowText(str);         if(m_CurSelTab=1)            m_page2.UpdateData(TRUE);   &

26、#160;    m_page2.GetDlgItem(IDC_EDIT_PAGE2)->GetWindowText(str);         MessageBox(str);    /首先我們先把當(dāng)前的頁面隱藏起來,然后得到新的頁面索引,最后就把相關(guān)頁面顯示出來即可。這比一個個去枚舉簡單多了。    pDialogm_CurSelTab->ShowWindow(SW_HIDE);    m_

27、CurSelTab = m_tab.GetCurSel();    pDialogm_CurSelTab->ShowWindow(SW_SHOW);經(jīng)過這幾步處理,一個簡單的Tab Contrl控件應(yīng)用程序就完成了。VC+ Tab Control控件的使用1. 新建一個MFC工程, 取名MyTab, 選擇Dialog based, 然后Finish.2. 刪除對話框上默認(rèn)添加的三個控件. 添加Tab Control控件并在Property屬性中設(shè)置ID為IDC_TABTEST 在More Styles里勾上Bottom. 調(diào)速尺寸使其布滿整個對話框, 我這邊

28、Tab Control的尺寸最后為164X203. 在ClassWizard為其添加變量, 變量名為m_tab. 類型為CTabCtrl.3. 在對話框的初始化函數(shù)OnInitDialog里面添加如下代碼:m_tab.InsertItem(0,"參數(shù)一");  /添加參數(shù)一選項卡m_tab.InsertItem(1,"參數(shù)二");  /添加參數(shù)二選項卡m_tab.InsertItem(2,"結(jié)果");    /添加結(jié)果選項卡 4.在對話框資源里面添加三個對話框資源, ID分別命名為ID

29、D_PARA1, IDD_PARA2, IDD_RESULT. 字體為宋體, 字號為9, style為Child, Border為None, 寬度調(diào)整為161. 再分別為其添加對應(yīng)的基于CDialog類CPara1, CPara2, CResult. 5. 在CMyTabDlg類中添加三個成員變量m_para1, m_para2, m_result, 分別是三個子對話框的實例. 代碼如下: CResult m_result;CPara2 m_para2;CPara1 m_para1;6. 在IDD_PARA1對話框上添加靜態(tài)文本控件內(nèi)容為"參數(shù)一" 再在后面插入一

30、個文本框控件, 用ClassWizard將其關(guān)聯(lián)為一個int型變量,名為m_nPara1;在IDD_PARA2對話框上添加靜態(tài)文本控件內(nèi)容為"參數(shù)二" 再在后面插入一個文本框控件, 用ClassWizard將其關(guān)聯(lián)為一個int型變量,名為m_nPara2;在IDD_RESULT對話框上添加靜態(tài)文本控件內(nèi)容為"結(jié)果" 再在后面插入一個文本框控件, 用ClassWizard將其關(guān)聯(lián)為一個int型變量,名為m_nResult;7. 為CPara1類添加成員函數(shù)int GetParaValue() 代碼如下:int CPara1:GetParaValue()&#

31、160;   return m_nPara1;為CPara2類添加成員函數(shù)int GetParaValue() 代碼如下:int CPara2:GetParaValue()    return m_nPara2;為CResult類添加成員函數(shù)void SetResultValue(int nResult) 代碼如下:void CResult:SetResultValue(int nResult)     m_nResult = nResult;8. 在IDD_MYTAB_DIALOG對話框的初始化函數(shù)On

32、InitDialog里面添加如下代碼: /關(guān)聯(lián)對話框,并且將IDC_TABTEST控件設(shè)為父窗口m_para1.Create(IDD_PARA1,GetDlgItem(IDC_TABTEST);m_para2.Create(IDD_PARA2,GetDlgItem(IDC_TABTEST);m_result.Create(IDD_RESULT,GetDlgItem(IDC_TABTEST);    /獲得IDC_TABTEST客戶區(qū)大小CRect rs;m_tab.GetClientRect(&rs);/調(diào)整子對話框在父窗口中的位置rs.top+

33、=1; rs.bottom-=60; rs.left+=1; rs.right-=2;     /設(shè)置子對話框尺寸并移動到指定位置m_para1.MoveWindow(&rs);m_para2.MoveWindow(&rs);m_result.MoveWindow(&rs);/分別設(shè)置隱藏和顯示m_para1.ShowWindow(true);m_para2.ShowWindow(false);m_result.ShowWindow(false);    /設(shè)置默認(rèn)的選項卡m_tab.SetCurSel(0);

34、 9. 添加Tab Control控件的TCN_SELCHANGE事件響應(yīng)函數(shù)OnSelchangeTabtest(NMHDR* pNMHDR, LRESULT* pResult) ,函數(shù)體代碼如下: int CurSel = m_tab.GetCurSel();    switch(CurSel)        case 0:         m_para1.ShowWindow(true);  

35、;       m_para2.ShowWindow(false);         m_result.ShowWindow(false);        break;    case 1:         m_para1.ShowWindow(false); 

36、0;       m_para2.ShowWindow(true);         m_result.ShowWindow(false);        break;    case 2:         m_para1.ShowWindow(false); 

37、0;       m_para2.ShowWindow(false);         m_result.ShowWindow(true);        break;    default:         ;      

38、60;  VC+中Tab鍵控制問題的解決辦法做作vc界面的都知道,如果在遇到多個控件用tab分組顯示時是一件很繁瑣的事情,同時代碼量也特別的大下面是我今天下午剛剛想出的一個自己認(rèn)為滿意的解決辦法。主要思路如下:做一個類CTabContainer,在初始化的時候確定將控件id分成幾組(也就是幾個tab標(biāo)簽),然后為每一組做一個鏈表分別保存每一個tab下屬的控件id集。這樣的話,只需在對話框初始化時做好一個基本的設(shè)定,然后在OnSelchangeTab1寫上m_pTabContainer->Show(m_tab.GetCurSel();就可以了。類的使用方法:在OnInitDialog()里面*pResult = 0; m_pTabContainer->Init(3,this);/3個tab標(biāo)簽按鈕,this對話框指針。m_pTabContainer->AddCtrlId(0,IDC_BUTTON1);/IDC_BUTTON1加到第一組tab當(dāng)中m_pTabContainer->AddCtrlId(0,IDC_BUTTON4);/下

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論