孙鑫VC++深入详解:Lesson7 Part4 ---对话框上各个控件之间循环接受回车键获得焦点


最终方案:是在OnOK()中循环改变对话框上的各个控件的焦点,而且这个方法不需要去定义EDIT的WndProc.
void CTestDlg::OnOK() {
// TODO: Add extra validation here
GetNextDlgTabItem(GetFocus(),false)->SetFocus();
// CDialog::OnOK(); //注释掉基类的OnOK(),这按回车键就不会关闭对话框了.
}

这里的OnOK()是MFC默认的响应回车键的函数,它是一个虚函数,由覆盖基类的虚函数OnOK()而来,它是由按钮的ID必须是IDOK所产生的函数,不是什么IDC_OK那种按钮的消息响应函数OnOk()(不是虚函数,k是小写的)

但是IDOK按钮即使删除了也没有关系,只要代码中重写了基类的 OnOK()就可以了.


也就是说,在对话框上面,每次按ENTER回车键时,都是默认的那个OnOK()来响应回车键,因此可以在OnOK()中GetNextDlgTabItem(GetFocus(),false)->SetFocus()

让不同的控件循环获得焦点,就是按照控件的Tab Order顺序来转移焦点,但是前提是必须设置控件的Tab stop属性


------Tab stop属性






//----- 下面是比较复杂的解决办法


输入焦点的传递:
第一个输入框EDIT1按下回车键后,焦点转移到第二个输入框EDIT2
思路:自己编写一个EDIT编辑框的窗口过程函数WndProc(),替换MFC的WndProc()
让编辑框的所有消息都通过自己的WndProc()来处理.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值