想做这么一个东西,不知怎么下手? 知道CPropertySheet和CPropertyPage的做法。感觉不是一回事。请大侠指点一下!先谢过! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CTabCtrl + dialog 就可以。 MessageBox(_T("你发的图确实看不到!"), _T("温馨提示"), MB_ICONINFORMATION); 图在这里——http://hi.csdn.net/space-9191110-do-album-picid-818194.html CTabCtrl + CDialog就可以了 正在看http://blogold.chinaunix.net/u3/101359/showart_2000485.html及附件程序。云里雾里。 CTabCtrl + CDialoghttp://www.vckbase.com/document/viewdoc/?id=398 CTabCtrl+Dialog用起来灵活,但感觉貌似不和章法(同CPropertySheet比);CPropertySheet易用,但有时不太灵活(同CTabCtrl比);以上是我瞎总结的,事实上我没弄过。但还是建议楼主有精力的话最好封装自己的CTabCtrl,注意汲取CPropertySheet的优点,是王道也.其实网上也有例子啦~ 正在仿这个例子——主对话框内放一Tab控件。为该控件建一CTabCtrl类型关联变量,该变量是主对话框类的一个成员。再为该控件从CTabCtrl派生一个类CMyTab。主对话框的OnInitDialog()里添加: m_tab.InsertItem(0,"标签1"); m_tab.InsertItem(1,"标签2"); CTab1* m_pE = new CTab1(); //m_tab.m_pE = m_pE; m_pE->Create(IDD_DIALOG1,&m_tab); CTab2* m_pM = new CTab2(); //m_tab.m_pM = m_pM; m_pM->Create(IDD_DIALOG2,&m_tab); CRect rect; m_tab.GetClientRect(rect); rect.InflateRect(-1,-30,-2,-2); m_pE->MoveWindow(rect); m_pE->ShowWindow(SW_SHOW);在MyTab类中添加对TCN_SELCHANGE消息的响应函数:void CMyTab::OnSelchange(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here CRect rect; GetClientRect(&rect); rect.DeflateRect(1,30,2,2); int cursel = this->GetCurSel(); switch(cursel) { case 0: {MessageBox("1 selected!"); //m_pM->ShowWindow(SW_HIDE); //m_pE->MoveWindow(rect); //m_pE->ShowWindow(SW_SHOW); break; } case 1: {MessageBox("2 selected!"); //m_pE->ShowWindow(SW_HIDE); //m_pM->MoveWindow(rect); //m_pM->ShowWindow(SW_SHOW); break; } } *pResult = 0;}编译没问题,但就是不弹出消息框。大侠指点一下啊?在线等。谢啦!!! CTab1和CTab2分别是2个标签页对应的对话框,两个对话框的ID分别为IDD_DIALOG1和IDD_DIALOG2。 原例中有这两句m_tab.m_pE = m_pE;m_tab.m_pM = m_pM;但我觉得CTabCtrl类无m_pE或m_pM成员。原例若删掉这两句,就报错。我的程序若有这两句,编译就说CTabCtrl类无m_pE或m_pM成员。删掉编译正常,可是对TCN_SELCHANGE消息无反应。 有兴趣的话可以看看这个http://blog.csdn.net/xianglitian/archive/2010/05/23/5618814.aspx 人家的例子应该是重载了CTabCtrl类,在里面定义了两个指针m_pE和m_pM King_hhuang:能详细说说吗? 你不有别人的代码吗,你照着看啊他如果m_tab.m_pE = m_pE;m_tab.m_pM = m_pM;访问没问题,肯定在m_tab所在的类里面定义了那两个指针啊你去看你的例子中的那个代码啊 King_hhuang:在例子的整个工程搜了一下m_pE,结果如下——D:\temp\Tab\MyTab.cpp(23): delete m_pE;D:\temp\Tab\MyTab.cpp(49): m_pE->MoveWindow(rect); D:\temp\Tab\MyTab.cpp(50): m_pE->ShowWindow(SW_SHOW);D:\temp\Tab\MyTab.cpp(54): m_pE->ShowWindow(SW_HIDE);D:\temp\Tab\MyTab.h(23): CEmployee* m_pE;D:\temp\Tab\TabDlg.cpp(123): CEmployee* m_pE = new CEmployee();D:\temp\Tab\TabDlg.cpp(124): m_tab.m_pE=m_pE;D:\temp\Tab\TabDlg.cpp(125): m_pE->Create(IDD_DIALOG1,&m_tab)D:\temp\Tab\TabDlg.cpp(134): m_pE->MoveWindow(rect);D:\temp\Tab\TabDlg.cpp(135): m_pE->ShowWindow(SW_SHOW);D:\temp\Tab\TabDlg.cpp(140): CEmployee* m_pE = new CEmployee();D:\temp\Tab\TabDlg.cpp(141): m_tab.m_pE = m_pE;D:\temp\Tab\TabDlg.cpp(142): m_pE->Create(IDD_DIALOG1,&m_tab); D:\temp\Tab\TabDlg.cpp(151): m_pE->MoveWindow(rect);D:\temp\Tab\TabDlg.cpp(152): m_pE->ShowWindow(SW_SHOW);TabDlg是主对话框,MyTab是Tab控件的关联类,m_tab是Tab控件的关联变量。 King_hhuang:能详细说说吗? D:\temp\Tab\MyTab.h(23): CEmployee* m_pE;头文件不就定义拉m_pE吗,你叫我怎么说啊,你对着源代码看啊先看懂它的源代码,照着做一个那怕就是按照你编程的思想,每个步骤copy一遍也可以啊,重要的是你要搞清楚它是怎么做的 原例作为学习素材,是个好引子。这个例子更好——http://wenku.baidu.com/view/b75e44543c1ec5da50e27053.html无论如何,感谢大家的帮助!谢谢! “CFont::CreatePointFont”: 不能将参数 2 从“const char [9]”转换为“LPCTSTR” MFC中建立动态坐标系 在线等! 在一个线程中NEWyige对象,在另一个线程中DELETE一个对象,出现错误? vc打开并读取txt文件 不能在菜单中调用DLL winpcap怎么打包 简单问题,怎么能让WORD类型在MessageBox中输出(在线等) VC开发的流程 函数声明的问题? 500分求教,请高手指点(关于 windows gui 方面的问题) VS2010中如何使用LibUIDK库 又一个制图问题 画两条平行线
云里雾里。
http://www.vckbase.com/document/viewdoc/?id=398
CPropertySheet易用,但有时不太灵活(同CTabCtrl比);
以上是我瞎总结的,事实上我没弄过。
但还是建议楼主有精力的话最好封装自己的CTabCtrl,注意汲取CPropertySheet的优点,是王道也.
其实网上也有例子啦~
主对话框内放一Tab控件。为该控件建一CTabCtrl类型关联变量,该变量是主对话框类的一个成员。
再为该控件从CTabCtrl派生一个类CMyTab。
主对话框的OnInitDialog()里添加:
m_tab.InsertItem(0,"标签1");
m_tab.InsertItem(1,"标签2"); CTab1* m_pE = new CTab1();
//m_tab.m_pE = m_pE;
m_pE->Create(IDD_DIALOG1,&m_tab);
CTab2* m_pM = new CTab2();
//m_tab.m_pM = m_pM;
m_pM->Create(IDD_DIALOG2,&m_tab); CRect rect;
m_tab.GetClientRect(rect);
rect.InflateRect(-1,-30,-2,-2);
m_pE->MoveWindow(rect);
m_pE->ShowWindow(SW_SHOW);在MyTab类中添加对TCN_SELCHANGE消息的响应函数:
void CMyTab::OnSelchange(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CRect rect;
GetClientRect(&rect);
rect.DeflateRect(1,30,2,2);
int cursel = this->GetCurSel();
switch(cursel)
{
case 0:
{MessageBox("1 selected!");
//m_pM->ShowWindow(SW_HIDE);
//m_pE->MoveWindow(rect);
//m_pE->ShowWindow(SW_SHOW);
break;
}
case 1:
{MessageBox("2 selected!");
//m_pE->ShowWindow(SW_HIDE);
//m_pM->MoveWindow(rect);
//m_pM->ShowWindow(SW_SHOW);
break;
}
}
*pResult = 0;
}
编译没问题,但就是不弹出消息框。
大侠指点一下啊?在线等。谢啦!!!
m_tab.m_pE = m_pE;
m_tab.m_pM = m_pM;
但我觉得CTabCtrl类无m_pE或m_pM成员。
原例若删掉这两句,就报错。
我的程序若有这两句,编译就说CTabCtrl类无m_pE或m_pM成员。删掉编译正常,可是对TCN_SELCHANGE消息无反应。
http://blog.csdn.net/xianglitian/archive/2010/05/23/5618814.aspx
能详细说说吗?
m_tab.m_pE = m_pE;
m_tab.m_pM = m_pM;
访问没问题,肯定在m_tab所在的类里面定义了那两个指针啊
你去看你的例子中的那个代码啊
在例子的整个工程搜了一下m_pE,结果如下——
D:\temp\Tab\MyTab.cpp(23): delete m_pE;
D:\temp\Tab\MyTab.cpp(49): m_pE->MoveWindow(rect);
D:\temp\Tab\MyTab.cpp(50): m_pE->ShowWindow(SW_SHOW);
D:\temp\Tab\MyTab.cpp(54): m_pE->ShowWindow(SW_HIDE);
D:\temp\Tab\MyTab.h(23): CEmployee* m_pE;
D:\temp\Tab\TabDlg.cpp(123): CEmployee* m_pE = new CEmployee();
D:\temp\Tab\TabDlg.cpp(124): m_tab.m_pE=m_pE;
D:\temp\Tab\TabDlg.cpp(125): m_pE->Create(IDD_DIALOG1,&m_tab)
D:\temp\Tab\TabDlg.cpp(134): m_pE->MoveWindow(rect);
D:\temp\Tab\TabDlg.cpp(135): m_pE->ShowWindow(SW_SHOW);
D:\temp\Tab\TabDlg.cpp(140): CEmployee* m_pE = new CEmployee();
D:\temp\Tab\TabDlg.cpp(141): m_tab.m_pE = m_pE;
D:\temp\Tab\TabDlg.cpp(142): m_pE->Create(IDD_DIALOG1,&m_tab);
D:\temp\Tab\TabDlg.cpp(151): m_pE->MoveWindow(rect);
D:\temp\Tab\TabDlg.cpp(152): m_pE->ShowWindow(SW_SHOW);
TabDlg是主对话框,MyTab是Tab控件的关联类,m_tab是Tab控件的关联变量。
能详细说说吗?
先看懂它的源代码,照着做一个
那怕就是按照你编程的思想,每个步骤copy一遍也可以啊,重要的是你要搞清楚它是怎么做的
这个例子更好——
http://wenku.baidu.com/view/b75e44543c1ec5da50e27053.html
无论如何,感谢大家的帮助!谢谢!