您的位置:首页 > 其它

wxWidgets设置登陆窗口用户名和密码的文本提示

2014-07-27 15:23 459 查看
由于最近在做一个项目,需要用到wxWidgets这个框架,但是wxWidgets这个框架目前来看使用范围不是很广,很多资料在网上都很难找到。因此,想把自己工作中遇到的一些有关wxWidgets的问题发到网上来,一来方便大家搜索,二来也对自己做个总结。

在项目中,需要用到登录窗口,登录中必然要有文本框输入用户名和密码进行验证,然后想做成像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();
}


这样子处理后,就可以起到提示的作用了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐