MFC中使用TAB Control控件.doc
MFC中使用TAB Control控件;转,
2010-11-22 16:15
转转自 转浪云
最转转转 wwwwoshidami
假如我转在有个SDI程序~View是Form View~想在上面放个Tab Control~包含两个Page。转在转我转看看转转转转理。来怎
首先然要增加一当个Tab Control转源~然后利用Class Wizard~在View中增加一个Control转量。接着建立转转转转源~转忘了把两个框Style改转Child~Border改转None。然后就可以在上面加其他控件了。接着利用Class Wizard~分转转转转转建立转~比如两个框两个CPage1和CPage2。然后在View转转文件中~加入转转转转象。同转增加一转转量两个框个int m_CurSelTab~用了
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
明是哪个Page即将被切转。
转了避免用转在切转Tab转~程序转Tab Index的枚转~可以利用转做转转事情。数来个
在View的初始化函中需要把数CPage1、CPage2和Tab Control转转起~保存转面地址~转置初始转面~等等。来并void CTab_testView::OnInitialUpdate(){
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
//转Tab Control增加转面两个
m_tab.InsertItem(0, _T("First"));
m_tab.InsertItem(1, _T("Second"));
//转建转转转两个框
m_page1.Create(IDD_DIALOG1, &m_tab);
m_page2.Create(IDD_DIALOG2, &m_tab);
//转定在Tab内转示的范转
CRect rc;
m_tab.GetClientRect(rc);
rc.top += 20;
rc.bottom -= 8;
rc.left += 8;
rc.right -= 8;
m_page1.MoveWindow(&rc);
m_page2.MoveWindow(&rc);
//把转转转象指转保存起框来
pDialog[0] = &m_page1;
pDialog[1] = &m_page2;
//转示初始转面
pDialog[0]->ShowWindow(SW_SHOW);
pDialog[1]->ShowWindow(SW_HIDE);
//保存前转转当
m_CurSelTab = 0;
}
转里面需要注意的是~我用了一个CDialog指转转转行保存~转转的大小是数来数Tab Control转面的~转下转转转着每转面的索引;转转方便快速存取,。个数数个用转切转转~需要转相转的消息。响
void CTab_testView::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
pDialog[m_CurSelTab]->ShowWindow(SW_HIDE);
m_CurSelTab = m_tab.GetCurSel();
pDialog[m_CurSelTab]->ShowWindow(SW_SHOW);*pResult = 0;
}
首先我转先把前的转面转藏起~然后得到新的转面索引~最后就把相转转面转示出可。转比一去枚转转转多了。当来来即个个
转有一点比转有意思~那就是DDX/DDV机制的用。要想转得运Tab Control各转面的据~可以利用个数DDX/DDV转式转用多次。
void CTab_testView::OnButton1()
{
// TODO: Add your 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);
AfxMessageBox(str2);
}
转转转步转理~基本上我转就可以利用几Tab Control的强大功能了。
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
VC之TAB 控件转例
转于用转了VB和VC#的我转~来VC控件是太麻转了~不转有什转转法,转多企转转在使用~所以转转转~咸淡算到转了~转里做了最转转转的真呢学扯个
例。
1. 在主面板上拖放一Tab Control控件~我转转里建立其在主面板转;CTabSampleDlg,里面的成转转量m_tab。2.添加子转转~其性转置转“两个框将属child~none”。转里要注意了~添加的必转是转承自DIALOG转的转转~而不是框转操作。然后生成新转“两个CTabPage1~ CTabPage2”。
3.转CTabSampleDlg转 添加成转转量~他转分转是两个CTabPage1和CTabPage2转的转例。4.在CTabSampleDlg转的OnInitDialog成转函的适位置添加如下代转。数内当
BOOL CTabSampleDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system 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())
{
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); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon//==========================================================
//初始化TAB
TCITEM 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.GetClientRect(&rec);//转得TAB控件的坐转
//定位转转转的位置~转里可以根据情自己转转偏移量卡况
rec.bottom -= 1;
rec.left += 1;
rec.top += 20;
rec.right -= 2;
//转建子转面
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_page1.ShowWindow(SW_SHOW);
m_page2.ShowWindow(SW_HIDE);
//===============================================================
return TRUE; // return TRUE unless you set the focus to a control
}
5. 转主面板上的TabControl 控件添加 OnSelchangeTab 事件~ 添加代转如下。
void CTabSampleDlg::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
switch (m_tab.GetCurSel())
{
case 0:
m_page1.ShowWindow(SW_SHOW);
m_page2.ShowWindow(SW_HIDE);
break;
case 1:
m_page1.ShowWindow(SW_HIDE);
m_page2.ShowWindow(SW_SHOW);
break;
default:
break;
}
*pResult = 0;
}
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Tab Control控件的转用
前天在上搜了点转料~是转于几网Tab Control控件的转用~转转做了一遍~今天再做有点生疏了~转是忘了点什转。于是转转在转~一是转以后使用提供方便~再是当儿
供大家考。参
首先~新建一基于转转的个框MFC转用程序~添加Tab Control控件~转其添加转量并CTabCtrl m_tab~然后~新建转转~均转置转性如下两个框属(转步重要很),Style--Child~Border--None~然后分转添加一文本。个框分转转转转转转建立新转两个框CPage1和CPage2。
转程序用了一个CDialog的指转转转行保存各转面~转转的大小是数来个数Tab Control转面的~转下转转转着每转面的索引;转转方便快速存取,。 明转量,个数数个声CDialog *pDialog[2]~且添加一并个int型转量用于保存前活转的转面索引~当int m_CurSelTab~接着~在OnInitDialog函中添加如下代转,数
//转Tab Control增加转面两个
m_tab.InsertItem(0, _T("First"));
m_tab.InsertItem(1, _T("Second"));
//转建转转转两个框
m_page1.Create(IDD_DIALOG1, &m_tab);
m_page2.Create(IDD_DIALOG2, &m_tab);
//转定在Tab内转示的范转
CRect rc;
m_tab.GetClientRect(rc);
rc.top += 20;
rc.bottom -= 8;
rc.left += 8;
rc.right -= 8;
m_page1.MoveWindow(&rc);
m_page2.MoveWindow(&rc);
//用转把转转转象指转保存起数框来
pDialog[0] = &m_page1;
pDialog[1] = &m_page2;
//转示初始转面
pDialog[0]->ShowWindow(SW_SHOW);
pDialog[1]->ShowWindow(SW_HIDE);
//保存前转转当
m_CurSelTab = 0;
转转就可转行正常的转示了~如果转转面切转转事件~可以转响个Tab Control控件添加消息转函,响数OnSelchangeTab~在转函中添加如下代转,并数
//得到转面的据数
CString str;
if(m_CurSelTab==0)
{
m_page1.UpdateData(TRUE);
m_page1.GetDlgItem(IDC_EDIT_PAGE1)->GetWindowText(str);
}
if(m_CurSelTab==1)
{
m_page2.UpdateData(TRUE);
m_page2.GetDlgItem(IDC_EDIT_PAGE2)->GetWindowText(str);
}
MessageBox(str);
//首先我转先把前的转面转藏起~然后得到新的转面索引~最后就把相转转面转示出可。转比一去枚转转转多了。当来来即个个
pDialog[m_CurSelTab]->ShowWindow(SW_HIDE);
m_CurSelTab = m_tab.GetCurSel();
pDialog[m_CurSelTab]->ShowWindow(SW_SHOW);转转转步转理~一转转的几个Tab Contrl控件转用程序就完成了。
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,VC++ Tab Control控件的使用
1. 新建一个MFC工程, 取名MyTab, 转转Dialog based, 然后Finish.
2. 转除转转上默转添加的三控件框个. 添加Tab Control控件在并Property属性中转置ID转IDC_TABTEST 在More Styles
框, 我转转Tab Control的尺寸最后转164X203. 在ClassWizard转其添加转量, 转量名转m_tab. 转型转CTabCtrl.3. 在转转的初始化函框数OnInitDialog里面添加如下代转:
m_tab.InsertItem(0,"参数一"); //添加一转转参数卡
m_tab.InsertItem(1,"参数二"); //添加二转转参数卡
m_tab.InsertItem(2,"转果"); //添加转果转转卡
4.在转转转源里面添加三转转转转源框个框, ID分转命名转IDD_PARA1, IDD_PARA2, IDD_RESULT. 字转宋体体, 字转号9, style转转其添加转转的基于CDialog转CPara1, CPara2, CResult. 5. 在CMyTabDlg转中添加三成转转量个m_para1, m_para2, m_result, 分转是三子转转的转例个框. 代转如下:CResult m_result;
CPara2 m_para2;
CPara1 m_para1;
6. 在IDD_PARA1转转上添加转文本控件容转框静内"参数一" 再在后面入一文本控件插个框, 用ClassWizard将个其转转转一在IDD_PARA2转转上添加转文本控件容转框静内"参数二" 再在后面入一文本控件插个框, 用ClassWizard将个其转转转一在IDD_RESULT转转上添加转文本控件容转框静内"转果" 再在后面入一文本控件插个框, 用ClassWizard将个其转转转一7. 转CPara1转添加成转函数int GetParaValue() 代转如下:
intCPara1::GetParaValue()
{
return m_nPara1;
}
转CPara2转添加成转函数int GetParaValue() 代转如下:
intCPara2::GetParaValue()
{
return m_nPara2;
}
转CResult转添加成转函数void SetResultValue(int nResult) 代转如下:
void CResult::SetResultValue(intnResult){
m_nResult = nResult;
}
8. 在IDD_MYTAB_DIALOG转转的初始化函框数OnInitDialog里面添加如下代转:
//转转转转框,并将且IDC_TABTEST控件转转父口窗
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客转大小区
CRect rs;
m_tab.GetClientRect(&rs);
//转整子转转在父口中的位置框窗
rs.top+=1;
rs.bottom-=60;
rs.left+=1;
rs.right-=2;
//转置子转转尺寸移转到指定位置框并
m_para1.MoveWindow(&rs);
m_para2.MoveWindow(&rs);
m_result.MoveWindow(&rs);
//分转转置转藏和转示
m_para1.ShowWindow(true);
m_para2.ShowWindow(false);
m_result.ShowWindow(false);
//转置默转的转转卡
m_tab.SetCurSel(0);
9. 添加Tab Control控件的TCN_SELCHANGE事件转函响数OnSelchangeTabtest(NMHDR* pNMHDR, LRESULT* pResult) ,
int CurSel = m_tab.GetCurSel();
switch(CurSel)
{
case 0:
m_para1.ShowWindow(true);
m_para2.ShowWindow(false);
m_result.ShowWindow(false);
break;
case 1:
m_para1.ShowWindow(false);
m_para2.ShowWindow(true);
m_result.ShowWindow(false);
break;
case 2:
m_para1.ShowWindow(false);
m_para2.ShowWindow(false);
m_result.ShowWindow(true);
break;
default:
;
}
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,VC++中Tab转控制转转的解转法决
做作vc界面的都知道~如果在遇到多控件用个tab分转转示转是一件繁转的事情~同转代转量也特转的大下面是我今天下午转转想出的一自己转转转意的解转法。很个决
主要思路如下,
做一转个CTabContainer,在初始化的转候定控件确将id分成转几(也就是几个tab转转)~然后转每一转做一转表分转保存每一个个
在转转初始化转做好一基本的转定~然后在框个OnSelchangeTab1写上m_pTabContainer->Show(m_tab.GetCurSel());
转的使用方法:
在OnInitDialog()里面
*pResult = 0;
m_pTabContainer->Init(3,this);//3个tab转转按转~this转转指转。框
m_pTabContainer->AddCtrlId(0,IDC_BUTTON1);//IDC_BUTTON1加到第一转tab当中 m_pTabContainer->AddCtrlId(0,IDC_BUTTON4);//下面转似
m_pTabContainer->AddCtrlId(0,IDC_BUTTON5); m_pTabContainer->AddCtrlId(1,IDC_BUTTON2); m_pTabContainer->AddCtrlId(1,IDC_BUTTON6); m_pTabContainer->AddCtrlId(2,IDC_BUTTON3); m_pTabContainer->AddCtrlId(2,IDC_BUTTON7); m_pTabContainer->AddCtrlId(2,IDC_BUTTON8); m_pTabContainer->Show(0);//默转转示第一转转下面的控件个
在控件TAb的事件OnSelchangeTab1
m_pTabContainer->Show(m_tab.GetCurSel());即可
附转另CTabContainer的源代转:
classCTabContainer
{
public:
CTabContainer();
virtual~CTabContainer();
CTabContainer(constCTabContainer&tabContainer); constCTabContainer&operator=(constCTabContainer&tabContainer);
BOOLInit(intnTabs,CWnd*pParent);
file://初始化tab,nTabs代表有按几个扭
BOOLAddCtrlId(intnTab,intnID);//将id添加到哪个tab中
BOOLDelete(intnTab,intnID);//转除id
voidShow(intnTab);//当哪个前转示tab
voidClear(void);//转放存和理工作内清
protected:
typedefCListCIntList;
CIntList*m_pIDGroups;//指向转表的指转
intm_nLCount;//转表的个数
CWnd*m_pParent;//父指转窗体
};
10. 在IDD_MYTAB_DIALOG转转下面添加一按转框个, 转转转"转算" 转其添加事件转函响数, 代转如下:
m_para1.UpdateData(true);
m_para2.UpdateData(true);
m_result.SetResultValue(m_para1.GetParaValue()+m_para2.GetParaValue());
m_result.UpdateData(false);
11.转小程序转转个很,但是他转明了Tab Control控件的基本用法.