控件焦点的问题

对话框工程里,我打算让利用键盘方向键,让焦点在5个编辑框、2个按钮之间移动。(不包括单选按钮A、B)下面是代码。方向→键时可以实现。但方向←键时候出问题了:当焦点从按钮I... 对话框工程里,我打算让利用键盘方向键,让焦点在5个编辑框、2个按钮之间移动。(不包括单选按钮A、B)下面是代码。方向→键时可以实现。但方向←键时候出问题了:当焦点从按钮IDOK向编辑框IDC_EDIT5移动时,就跳到单选按钮里,不能移动了。请问是怎么回事?

代码如下:
//重载虚函数PreTranslateMessage函数,在该函数里操作键盘响应BOOL CMainDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class
if(pMsg->message!=WM_KEYDOWN) //WM_KEYDOWN为键盘按下
{ //如果不是键盘按下响应,则直接退出 return CDialog::PreTranslateMessage(pMsg); } UINT ntmp[7]={IDC_EDIT1,IDC_EDIT2,IDC_EDIT3,IDC_EDIT4,IDC_EDIT5, IDOK,IDCANCEL }; int i=0;
while(1) { if(GetFocus()==GetDlgItem(ntmp[i])) {break;} //如果是当前焦点则跳出while循环,执行后面的程序 if(i==6){return -1; }//退出 i++; }
if(VK_RIGHT==(pMsg->wParam)) //方向→键 { if(i==6){GetDlgItem(ntmp[0])->SetFocus();} else{GetDlgItem(ntmp[i+1])->SetFocus();} }
else if(VK_LEFT==(pMsg->wParam)) //方向←键 { if(i==0) {GetDlgItem(ntmp[6])->SetFocus();} else {GetDlgItem(ntmp[i-1])->SetFocus();} }
return CDialog::PreTranslateMessage(pMsg);}
展开
 我来答
bhtzu
2014-03-01 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4248万
展开全部
编辑框,因为具有文本处理功能,因此对键盘等输入,是有截获权限的。
在对话框中,当焦点在编辑框上的时候,对话框无法对键盘消息进行直接响应,必须是由编辑框优先处理,而对话框接收到的,是编辑框处理完成后”抛出“的消息。
一般如果要改变编辑框的键盘响应,需要派生自定义的编辑框类,重载编辑框消息响应,并将对话框使用的编辑框通过子类化改变为自定义编辑框才可以。(回车键和标准响应键不需要)
追问
谢谢你提供的思路。
只是问题和你的回答略有不同,是“当焦点从按钮IDOK向编辑框IDC_EDIT5移动时,就跳到单选按钮里,不能移动了。”请问怎么处理?我也在查书,但是没找到
追答
你在资源编辑器里面调整一些order次序,应该能说明干扰的就是编辑框。
其它控件,即使你不自己处理,一部分也接受方向键切换。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式