wxWidgets设置登陆窗口用户名和密码的文本提示
2014-07-27 15:23
459 查看
由于最近在做一个项目,需要用到wxWidgets这个框架,但是wxWidgets这个框架目前来看使用范围不是很广,很多资料在网上都很难找到。因此,想把自己工作中遇到的一些有关wxWidgets的问题发到网上来,一来方便大家搜索,二来也对自己做个总结。
在项目中,需要用到登录窗口,登录中必然要有文本框输入用户名和密码进行验证,然后想做成像QQ那样可以在文本框中有提示信息说明此文本框的作用。先上图,看看效果:
像上图那样,文本框没有获得焦点的时候,提示输入信息,文本框获得焦点的时候,用户可以输入字符。那具体代码中应该怎么实现呢?
首先,窗口的布局信息,是在XRC文件中的:
这样子处理后,就可以起到提示的作用了。
在项目中,需要用到登录窗口,登录中必然要有文本框输入用户名和密码进行验证,然后想做成像QQ那样可以在文本框中有提示信息说明此文本框的作用。先上图,看看效果:
像上图那样,文本框没有获得焦点的时候,提示输入信息,文本框获得焦点的时候,用户可以输入字符。那具体代码中应该怎么实现呢?
首先,窗口的布局信息,是在XRC文件中的:
<object class="sizeritem"> <span style="white-space:pre"> </span><option>0</option> <span style="white-space:pre"> </span><flag>wxALL</flag> <span style="white-space:pre"> </span><border>10</border> <span style="white-space:pre"> </span><object class="wxTextCtrl" name="ID_EDIT_USERNAME"> <span style="white-space:pre"> </span><size>200,25</size> <span style="white-space:pre"> </span><value>Username:</value> <span style="white-space:pre"> </span><style>wxTE_PROCESS_ENTER</style> <span style="white-space:pre"> </span><fg>#808080</fg> <span style="white-space:pre"> </span></object> </object> <object class="sizeritem"> <span style="white-space:pre"> </span><option>0</option> <span style="white-space:pre"> </span><flag>wxALL</flag> <span style="white-space:pre"> </span><border>10</border> <span style="white-space:pre"> </span><object class="wxTextCtrl" name="ID_EDIT_PASSWORD"> <span style="white-space:pre"> </span><size>200,25</size> <span style="white-space:pre"> </span><!-- <style>wxTE_PASSWORD</style> --> <span style="white-space:pre"> </span><value>Password:</value> <span style="white-space:pre"> </span><fg>#808080</fg> <span style="white-space:pre"> </span></object> </object>然后,在代码中加载对话框资源的函数里设置控件获得焦点事件的处理:
XRCCTRL(*this, "ID_EDIT_USERNAME", wxTextCtrl)->Connect(wxEVT_SET_FOCUS, wxFocusEventHandler(CLogonDialog::OnClearTipValue), 0, this); XRCCTRL(*this, "ID_EDIT_PASSWORD", wxTextCtrl)->Connect(wxEVT_SET_FOCUS, wxFocusEventHandler(CLogonDialog::OnClearTipValue), 0, this);相应的获取焦点事件处理逻辑如下:
void CLogonDialog::OnClearTipValue(wxFocusEvent& event) { if (event.GetId() == XRCID("ID_EDIT_USERNAME")) { if (m_usernameTipValue) { XRCCTRL(*this, "ID_EDIT_USERNAME", wxTextCtrl)->SetValue(_T("")); XRCCTRL(*this, "ID_EDIT_USERNAME", wxTextCtrl)-> SetForegroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT)); m_usernameTipValue = false; } if (XRCCTRL(*this, "ID_EDIT_PASSWORD", wxTextCtrl)->GetValue().IsEmpty()) { XRCCTRL(*this, "ID_EDIT_PASSWORD", wxTextCtrl)->SetValue(_("Password:")); XRCCTRL(*this, "ID_EDIT_PASSWORD", wxTextCtrl)-> SetForegroundColour(wxColour(128, 128, 128)); wxTextCtrl* password = XRCCTRL(*this, "ID_EDIT_PASSWORD", wxTextCtrl); wxTextCtrl_SetPasswordFlag(password, false); m_passwordTipValue = true; } } else if (event.GetId() == XRCID("ID_EDIT_PASSWORD")) { if (m_passwordTipValue) { XRCCTRL(*this, "ID_EDIT_PASSWORD", wxTextCtrl)->SetValue(_T("")); XRCCTRL(*this, "ID_EDIT_PASSWORD", wxTextCtrl)-> SetForegroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT)); wxTextCtrl* password = XRCCTRL(*this, "ID_EDIT_PASSWORD", wxTextCtrl); wxTextCtrl_SetPasswordFlag(password, true); m_passwordTipValue = false; } if (XRCCTRL(*this, "ID_EDIT_USERNAME", wxTextCtrl)->GetValue().IsEmpty()) { XRCCTRL(*this, "ID_EDIT_USERNAME", wxTextCtrl)->SetValue(_("Username:")); XRCCTRL(*this, "ID_EDIT_USERNAME", wxTextCtrl)-> SetForegroundColour(wxColour(128, 128, 128)); m_usernameTipValue = true; } } else { if (XRCCTRL(*this, "ID_EDIT_USERNAME", wxTextCtrl)->GetValue().IsEmpty()) { XRCCTRL(*this, "ID_EDIT_USERNAME", wxTextCtrl)->SetValue(_("Username:")); XRCCTRL(*this, "ID_EDIT_USERNAME", wxTextCtrl)-> SetForegroundColour(wxColour(128, 128, 128)); m_usernameTipValue = true; } if (XRCCTRL(*this, "ID_EDIT_PASSWORD", wxTextCtrl)->GetValue().IsEmpty()) { XRCCTRL(*this, "ID_EDIT_PASSWORD", wxTextCtrl)->SetValue(_("Password:")); XRCCTRL(*this, "ID_EDIT_PASSWORD", wxTextCtrl)-> SetForegroundColour(wxColour(128, 128, 128)); wxTextCtrl* password = XRCCTRL(*this, "ID_EDIT_PASSWORD", wxTextCtrl); wxTextCtrl_SetPasswordFlag(password, false); m_passwordTipValue = true; } } event.Skip(); }
这样子处理后,就可以起到提示的作用了。
相关文章推荐
- jquery 登陆窗口用户名、密码显示提示框
- 解决:“开机设置了密码,可开机时却没有提示要输入密码的提示框,还是直接进入系统”和“系统无法让您登陆.请确定您的用户名及域名无误,然后再输入密码.密码的字母必须使用正确的大小写”
- 华为S6502设置使用用户名、密码登陆
- 去掉系统启动时提示输入用户名及密码 ,Windows XP自动登录设置方法(转)
- LAN管理器身份验证级别,WIN7访问共享提示:“登陆失败:未知的用户名或密码错误
- tomcat设置登陆用户名密码
- win7下怎样设置putty免用户名密码登陆
- ma5200f设置使用用户名、密码登陆
- 单个用户OWA登陆失败,提示用户名和密码错误
- 设置tomcat的登陆用户名和密码
- win7 打开共享目录提示 —— 登陆失败:未知的用户名或密码错误解决办法
- WIN7访问局域网提示“登陆失败:未知的用户名或密码错误”
- 配置hadoop集群时,ssh无密码登陆设置(各个主机的用户名需要一样)
- WIN7访问共享提示:“登陆失败:未知的用户名或密码错误”
- SPS2007 的备用映射域名登陆时提示输入用户名和密码的问题
- Exchange web 在用户名密码都正确的情况下登陆 部分账户 提示 HTTP/1.1 401 未经授权
- SSH设置了自动登陆却还提示输入密码
- windowsXP系统中设置屏保密码没有提示输入密码的窗口
- 设置SSH自动登陆(免密码,用户名)
- Cisco设备设置通过用户名密码方式登陆