




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)校晾衣間管理制度
- 學(xué)校精準(zhǔn)化管理制度
- 學(xué)校近出入管理制度
- 學(xué)生奶公司管理制度
- 孵化園公司管理制度
- 安全告知牌管理制度
- 安全附加件管理制度
- 完善實(shí)訓(xùn)室管理制度
- 寶鋼吸煙區(qū)管理制度
- 實(shí)驗(yàn)室家具管理制度
- 現(xiàn)場(chǎng)總線總復(fù)習(xí)(河南理工大學(xué))
- 北大夏令營(yíng)試題及答案
- 建設(shè)項(xiàng)目全生命周期安全風(fēng)險(xiǎn)管理研究
- 鋼結(jié)構(gòu)電梯井道合同模板
- 室內(nèi)裝修施工設(shè)計(jì)方案模板
- 2024年伊犁州公安局招聘警務(wù)輔助人員考試真題
- 湘教版六年級(jí)音樂教案下冊(cè)
- 四川省內(nèi)江市隆昌市2024-2025學(xué)年六年級(jí)下學(xué)期小升初真題數(shù)學(xué)試卷含解析
- 2025年人衛(wèi)題庫(kù)1類(眼科.帶解析)
- 2025年新疆維吾爾阿克蘇地區(qū)沙雅縣小升初數(shù)學(xué)檢測(cè)卷含解析
- 變頻器應(yīng)用課件
評(píng)論
0/150
提交評(píng)論