请教,当edit获取当前输入的时候,如何设置登陆按钮为选中,表示按回车就直接点了登陆按钮

lsupper 2009-10-17 05:17:17
我想在有一个登陆框,里面有用户名和密码,登陆,取消几个控件。之间可以用tab键进行切换。
我想的是:

当焦点在用户名和密码的输入框的时候,如果让用户觉的当前按下enter的时候,响应的是login按钮。就是login有边框。不理解的看看QQ的登陆
...全文
186 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanzh 2009-10-18
  • 打赏
  • 举报
回复
控件的登录ID用这个IDOK,也就是系统生成的那个ok按钮,就可以了!当然要default button 要选中

当在该对话框按回车就会login退出!
如果不想退出,可以在
void CTestDlg::OnOK() 函数中判断一下,来确定是不是要这样做
当tab到取消按钮的时候,取消按钮就有虚线边框,然后无论再点空格还是回车键都可以正常退出,我刚写完测试!
only_youch 2009-10-18
  • 打赏
  • 举报
回复
不好意思,函数写错了。OnChar函数可能触发不了。因为窗口的消息会发送给带有焦点的窗口。
要处理这个消息就要在有焦点的窗口处理之前拦截。这时要处理的函数应该是PreTranslateMessage.

BOOL xxxdlg::PreTranslateMessage(MSG* pMsg)
{
 if (WM_CHAR == pMsg->message && HIBYTE(GetKeyState(VK_RETURN)))
 {
//call you function.
 }
 return yyydlg::PreTranslateMessage(pMsg);
}
only_youch 2009-10-18
  • 打赏
  • 举报
回复
我提供一种比较笨一点的方法:

在你的程序里面重写一个消息:WM_CHAR
收到消息时,判断
1>当前焦点是否在两个 EDIT控件上面,
2>当前输入的CHAR是不是RETURN,
同时满足的时候就调用你LOGIN的响应函数
代码如下:
void CXXXDLG::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default

if(VK_RETURN == nChar)
{
CWnd* wndEdit = GetDlgItem(IDC_EDIT1);
if(IsWindow(wndEdit->GetSafeHwnd()))
{
if(wndEdit->GetSafeHwnd() == GetFocus()->GetSafeHwnd())
{
// CALL LOGIN FUNCTION.
}
}
}
CDialog::OnChar(nChar, nRepCnt, nFlags);
}

未验证过,大概思路是这样的。你试一下。
MoXiaoRab 2009-10-18
  • 打赏
  • 举报
回复
Login按钮的default button属性设置成true不就好了
lsupper 2009-10-18
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lsupper 的回复:]
引用 2 楼 ziplj 的回复:
处理按键事件呗  说的那么复杂的

当tab在取消上的时候,登陆按钮状态还是选中状态,一直都选中~~~ 汗,那样的话就。。。。 让用户觉的登陆怎么总是选中,请看看QQ的登陆~~~
[/Quote]
汗,哪有这么简单,哥们 你先试试了再说~~~
waitlife 2009-10-18
  • 打赏
  • 举报
回复
这么简单,你用SetFocus把焦点定在输入框中,按“登录”按钮在资源编辑器中设置为缺省按钮不就OK了
lsupper 2009-10-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ziplj 的回复:]
处理按键事件呗  说的那么复杂的
[/Quote]
当tab在取消上的时候,登陆按钮状态还是选中状态,一直都选中~~~ 汗,那样的话就。。。。 让用户觉的登陆怎么总是选中,请看看QQ的登陆~~~
lsupper 2009-10-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 oyster2008 的回复:]
在属性里把登录按钮的default button属性设置成true
[/Quote]

设置defid,是可以让当焦点在用户名,密码那的时候,显示“按回车就相当于点了登陆”。
但是,当我用tab键在这几个控件间切换的时候,比如当tab到取消登陆那按钮时,登陆显示还是被选中状态~~~~ 不行~~
lsupper 2009-10-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 oyster2008 的回复:]
另外在对话框启动的时候把焦点设置到loginbutton上
[/Quote]
设置defid,是可以让当焦点在用户名,密码那的时候,显示“按回车就相当于点了登陆”。
但是,当我用tab键在这几个控件间切换的时候,比如当tab到取消登陆那按钮时,登陆显示还是被选中状态~~~~
lsupper 2009-10-18
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 yuanzh 的回复:]
控件的登录ID用这个IDOK,也就是系统生成的那个ok按钮,就可以了!当然要default button 要选中

当在该对话框按回车就会login退出!
如果不想退出,可以在
void CTestDlg::OnOK() 函数中判断一下,来确定是不是要这样做
当tab到取消按钮的时候,取消按钮就有虚线边框,然后无论再点空格还是回车键都可以正常退出,我刚写完测试!

[/Quote]
恩 可以了,其实,上面一些朋友说的是可以的,但是,主要是我使用了一个:
http://www.codeproject.com/KB/buttons/cxskinbutton.aspx
中的继承自CBUTTON的类,想实现对button背景图片样式什么的改变。
这样导致在default id的时候,没有这个效果。
哪位朋友有好的EX_CBUTTON类?可以实现换肤,并且上面提到的问题不会出现?
config_man 2009-10-18
  • 打赏
  • 举报
回复
膜拜楼上
蒋晟 2009-10-17
  • 打赏
  • 举报
回复
CDialog::SetDefID
oyster2008 2009-10-17
  • 打赏
  • 举报
回复
另外在对话框启动的时候把焦点设置到loginbutton上
oyster2008 2009-10-17
  • 打赏
  • 举报
回复
在属性里把登录按钮的default button属性设置成true
Hiiishe 2009-10-17
  • 打赏
  • 举报
回复
把登陆按钮的ID设置为,IDOK,
编辑框框Want Return属性为FALSE.就可以了
muzizongheng 2009-10-17
  • 打赏
  • 举报
回复
捕捉vk_enter消息后执行 login 函数啊, 设置login按钮为default 按钮, tab索引是所有按钮的第一个.


ok , 结贴给分.
ziplj 2009-10-17
  • 打赏
  • 举报
回复
处理按键事件呗 说的那么复杂的
wjlsmail 2009-10-17
  • 打赏
  • 举报
回复
处理窗体的OnKeyPress事件 Enter->Tab

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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