怎样判断,属性页的标签头是否失去焦点?谢谢回答

liujin1234 2009-08-07 02:31:45
如题
...全文
163 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
socoola 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 liujin1234 的回复:]
C/C++ codevoid 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);


}
这是我函数里面的代码,CPropPage4 是对话框所对应的类,这个函数是通过类向导添加的,为什么不行?
[/Quote]
当你的属性页show的时候,如果没有添加代码设置,焦点早就转移到你的属性页的控件上或其他地方去了(焦点即使是在你的属性页的控件上,也不属于属性页),所以不管你怎么切换,WM_KILLFOCUS消息不是发送到你的属性页,而是发到获取到焦点的窗口去了。
MoXiaoRab 2009-08-07
  • 打赏
  • 举报
回复
OnKillactive()可行。

OnKillFocus不是对一个标签而言的,而是对一个控件而言的
gyang_pinner 2009-08-07
  • 打赏
  • 举报
回复
我试了下,属性页不会去响应OnKillFocus();
而是OnSetActive()和OnKillactive();再切换时调用()!
我建议你用DDX机制来修改控件title好一些!
在下也是刚入门!
liujin1234 2009-08-07
  • 打赏
  • 举报
回复

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);


}

这是我函数里面的代码,CPropPage4 是对话框所对应的类,这个函数是通过类向导添加的,为什么不行?
liujin1234 2009-08-07
  • 打赏
  • 举报
回复
我的对话框不是我的主窗口
bohut 2009-08-07
  • 打赏
  • 举报
回复
你的对话框如果是你的主窗口的话,是不会在程序中响应WM_KILLFOCUS消息的。
liujin1234 2009-08-07
  • 打赏
  • 举报
回复
谢谢楼上的回答,刚才我用OnKillFocus(CWnd* pNewWnd) 这个函数,判断一个对话框是否市区焦点,我调试程序,发现根本不执行这个函数,是怎么回事?
bohut 2009-08-07
  • 打赏
  • 举报
回复
if( GetFocus()->GetDlgCtrlID() != 你的控件ID )
{
//失去焦点
}
oyljerry 2009-08-07
  • 打赏
  • 举报
回复
GetFocus()
liujin1234 2009-08-07
  • 打赏
  • 举报
回复
沙发

16,472

社区成员

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

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

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