捕捉切换属性页的标签页事件,谢谢回答

liujin1234 2009-08-06 03:07:35
请问下,怎样在切换属性页的标签页中获得一个事件,我想处理别的代码。我用了 virtual BOOL OnSetActive();这个函数,用类向导,没有这个函数,我手动添加,说重复定义,但是我以前并没有定义这个函数?请问这是怎么回事?谢谢回答
...全文
85 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
liujin1234 2009-08-08
  • 打赏
  • 举报
回复
我现在彻底不知道该怎么想了,从头开始说起,我的问题如下,请各位给个思路,谢谢
我界面上有一个属性页,我的结构如下:

class CViewPropertySheet : public CPropertySheet

class CViewPropertyPage : public CPropertyPage

class CMyFormView : public CPropPgFormView


class CPropPgFormView : public CFormView

class CPropPage1 : public CViewPropertyPage(第一个页面)

class CPropPage2 : public CViewPropertyPage(第二个页面)

class CPropPage3 : public CViewPropertyPage(第三个页面)

class CPropPage4 : public CViewPropertyPage (第四个页面)


我这个属性页有四个页面组成,我想在点击第一个属性页的标签的时候,对这个对话框进行一些操作。在第三个标签页不显示的时候做一些操作,请问这个怎么处理?应该用什么事件?这四个页面是四个对话框,我的想法是,在这个对话框获得焦点,或者失去焦点的时候进行操作,但是根本不执行获得焦点或者得到焦点的代码


void CPropPage4::OnKillFocus(CWnd* pNewWnd)
{
CViewPropertyPage::OnKillFocus(pNewWnd);
GetDlgItem(IDC_EDIT1)->SetWindowText("");
GetDlgItem(IDC_EDIT2)->SetWindowText("");
GetDlgItem(IDC_EDIT3)->SetWindowText("");
GetDlgItem(IDC_EDIT4)->SetWindowText("");
GetDlgItem(IDC_EDIT_START_T)->SetWindowText("");
GetDlgItem(IDC_EDIT_END_T)->SetWindowText("");
GetDlgItem(IDC_EDIT_T)->SetWindowText("");
UpdateData(TRUE);


}
我另发了帖子,帖子地址是:http://topic.csdn.net/u/20090808/09/e744b52e-6851-465c-a796-19bfc0ef0fda.html?seed=828310785&r=58927367#r_58927367
na_he 2009-08-06
  • 打赏
  • 举报
回复
GetPage(0);后面是页面得index值,从0开始。那么第一页就是0
用法就像您上面对active操作的那样了。
CPropertySheet* sheet = (CPropertySheet*) GetParent( );
int count = sheet->GetPageCount( );

for (int i = 0; i < count; i++)
{
CPropertyPage* page = (CPropertyPage*) sheet->GetPage(i);

// Add your code here.
// …
}
huziwu 2009-08-06
  • 打赏
  • 举报
回复
你可以用下面语句获得第1页
CPropPage1* cp1 = pView->m_PropSheet.GetPage(0);
liujin1234 2009-08-06
  • 打赏
  • 举报
回复
顶,咋没人回答呢?
我的函数里面的具体代码是

BOOL CViewPropertyPage::OnSetActive()
{

CMyFormView* pView = (CMyFormView*)GetParent()->GetParent();

if (pView->m_PropSheet.GetActiveIndex()==0)
{

CPropPage1* cp1;
cp1=(CPropPage1 *)pView->m_PropSheet.GetActivePage();
cp1->GetDlgItem(IDC_LIST2)->ShowWindow(SW_HIDE);
cp1->GetDlgItem(IDC_MONTHCALENDAR1)->ShowWindow(SW_SHOW);
}
return CPropertyPage::OnSetActive();
}
liujin1234 2009-08-06
  • 打赏
  • 举报
回复
谢谢楼上的回答,我找到这个函数了,但是,我现在怎么获在这个函数里面获得我的第一个属性页,然后对这个属性页进行操作呢?谢谢回答
huziwu 2009-08-06
  • 打赏
  • 举报
回复
你的属性页类要继承CPropertyPage类才有OnSetActive()函数,直接在向导里就能找到
liujin1234 2009-08-06
  • 打赏
  • 举报
回复
没有回答吗?刚才个人失误,把bool换成BOOL就可以通过编译了,但是最后发现,这个函数不是切换标签时所触发的事件,请问下,我如果切换属性页的标签触发的是什么事件,我在msdn上没找到,。。谢谢回答。。
liujin1234 2009-08-06
  • 打赏
  • 举报
回复
沙发

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧