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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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);     /把對(duì)話框?qū)ο笾羔槺4嫫饋?#160;    pDialog0 = &m_page1; 

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

7、大小是Tab Control頁(yè)面的個(gè)數(shù),數(shù)組下標(biāo)對(duì)應(yīng)著每個(gè)頁(yè)面的索引(這樣方便快速存取)。用戶切換時(shí),需要響應(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)前的頁(yè)面隱藏起來,然后得到新的頁(yè)面索引,最后就把相關(guān)頁(yè)面顯示出來即可。這比一個(gè)個(gè)去枚舉簡(jiǎn)單多了。還有一點(diǎn)比較有意思,那就是DDX/DDV機(jī)制的運(yùn)用。要想獲得Tab Control各個(gè)頁(yè)面的數(shù)據(jù),可以利用DDX/DDV機(jī)制,但需要注意,因?yàn)檫@是多個(gè)頁(yè)面,所以需要顯式調(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的強(qiáng)大功能了。VC之TAB 控件實(shí)例對(duì)于用慣了VB和VC#的我來說,VC控件真是太麻煩了,不過有什么辦法呢?許多企業(yè)還在使用,所以繼續(xù)學(xué)習(xí),咸淡算扯到這了,這里做了個(gè)最為簡(jiǎn)單的Tab Control 的使用范例。 1. 在主面板上拖放一Tab Control控件,我們這里建立其在主面板類(CTabSampleDlg)里面的成員變量m_tab。2.添加兩個(gè)子對(duì)話框,將其屬性設(shè)置為“child,none”。這里要注意了,添加的必須是繼承自DIALOG類的對(duì)話框,而不是PropPa

11、ge對(duì)話框,否則的話,子面板將不能響應(yīng)用戶操作。然后生成兩個(gè)新類“CTabPage1, CTabPage2”。3.為CTabSampleDlg類 添加兩個(gè)成員變量,他們分別是CTabPage1和CTabPage2類的實(shí)例。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 = "第一頁(yè)"tc2.mask = TCIF_TEXT;tc2.pszText = "第二頁(yè)"m_tab.InsertItem(0, &tc1);m_tab.InsertItem(1, &tc2); /到這里只是添加了兩個(gè)tab頁(yè)CRect rec;m_tab.Ge

15、tClientRect(&rec);/獲得TAB控件的坐標(biāo)/定位選項(xiàng)卡頁(yè)的位置,這里可以根據(jù)情況自己調(diào)節(jié)偏移量rec.bottom -= 1;rec.left += 1;rec.top += 20;rec.right -= 2;/創(chuàng)建子頁(yè)面m_page1.Create(IDD_DIALOG1, GetDlgItem(IDC_TAB);m_page2.Create(IDD_DIALOG2, GetDlgItem(IDC_TAB);/將子頁(yè)面移動(dòng)到指定的位置m_page1.MoveWindow(&rec);m_page2.MoveWindow(&rec);/顯示子頁(yè)面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)上搜了點(diǎn)資料,是關(guān)于Tab Control控件的應(yīng)用,當(dāng)時(shí)還做了一遍,今天再做有點(diǎn)生疏了,總是忘了點(diǎn)什么。于是總結(jié)在這兒,一是為以后使用提供方便

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

21、接著,在OnInitDialog函數(shù)中添加如下代碼:    /為Tab Control增加兩個(gè)頁(yè)面    m_tab.InsertItem(0, _T("First");    m_tab.InsertItem(1, _T("Second");    /創(chuàng)建兩個(gè)對(duì)話框    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ù)組把對(duì)話框?qū)ο笾羔槺4嫫饋?#160;   pDialog0 = &m_page1;    pDialog1 = &m_page2;    /顯示初始頁(yè)面    pDialog0->ShowWindow(SW_SHOW);    pDialog1->ShowWindo

24、w(SW_HIDE);    /保存當(dāng)前選擇    m_CurSelTab = 0;這樣就可進(jìn)行正常的顯示了,如果響應(yīng)頁(yè)面切換這個(gè)事件,可以為Tab Control控件添加消息響應(yīng)函數(shù):OnSelchangeTab,并在該函數(shù)中添加如下代碼:   /得到頁(yè)面的數(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)前的頁(yè)面隱藏起來,然后得到新的頁(yè)面索引,最后就把相關(guān)頁(yè)面顯示出來即可。這比一個(gè)個(gè)去枚舉簡(jiǎn)單多了。    pDialogm_CurSelTab->ShowWindow(SW_HIDE);    m_

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

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

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

30、個(gè)文本框控件, 用ClassWizard將其關(guān)聯(lián)為一個(gè)int型變量,名為m_nPara1;在IDD_PARA2對(duì)話框上添加靜態(tài)文本控件內(nèi)容為"參數(shù)二" 再在后面插入一個(gè)文本框控件, 用ClassWizard將其關(guān)聯(lián)為一個(gè)int型變量,名為m_nPara2;在IDD_RESULT對(duì)話框上添加靜態(tài)文本控件內(nèi)容為"結(jié)果" 再在后面插入一個(gè)文本框控件, 用ClassWizard將其關(guān)聯(lián)為一個(gè)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對(duì)話框的初始化函數(shù)On

32、InitDialog里面添加如下代碼: /關(guān)聯(lián)對(duì)話框,并且將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)整子對(duì)話框在父窗口中的位置rs.top+

33、=1; rs.bottom-=60; rs.left+=1; rs.right-=2;     /設(shè)置子對(duì)話框尺寸并移動(dòng)到指定位置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)的選項(xiàng)卡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界面的都知道,如果在遇到多個(gè)控件用tab分組顯示時(shí)是一件很繁瑣的事情,同時(shí)代碼量也特別的大下面是我今天下午剛剛想出的一個(gè)自己認(rèn)為滿意的解決辦法。主要思路如下:做一個(gè)類CTabContainer,在初始化的時(shí)候確定將控件id分成幾組(也就是幾個(gè)tab標(biāo)簽),然后為每一組做一個(gè)鏈表分別保存每一個(gè)tab下屬的控件id集。這樣的話,只需在對(duì)話框初始化時(shí)做好一個(gè)基本的設(shè)定,然后在OnSelchangeTab1寫上m_pTabContainer->Show(m_tab.GetCurSel();就可以了。類的使用方法:在OnInitDialog()里面*pResult = 0; m_pTabContainer->Init(3,this);/3個(gè)tab標(biāo)簽按鈕,this對(duì)話框指針。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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論