使用Duilib开发Windows软件(4)——消息传递
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用Duilib开发Windows软件(4)——消息传递,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2011字,纯文字阅读大概需要3分钟。
内容图文
![使用Duilib开发Windows软件(4)——消息传递](/upload/InfoBanner/zyjiaocheng/945/18cd070df23947f6b5b5da36f41bb1bd.jpg)
云信Duilib中没有窗体类的函数可以用来直接收取到所有控件的事件,每个控件都可以单独设置自己的事件处理函数,一般在InitWindow方法中初始化各个控件的事件处理函数。
每个控件都有许多形如Attach···的方法,比如按钮控件Button有AttachMouseEnter、AttachButtonDown、AttachClick方法,他们分别用于指定控件鼠标进入、鼠标按下、鼠标单击的事件处理函数。Attach···的方法的参数需要传入使用base库的Bind函数处理过的函数,Bind函数是对c++11中Bind函数的进一步优化,如果您不了解Bind函数,建议可以学习C++11的相关资料。处理函数的声明格式为:
bool Notify(ui::EventArgs* msg);
EventArgs结构体中包含了触发事件的控件的指针、鼠标坐标、按键状态、时间戳等信息。函数的返回值,返回true表示继续传递控件消息,返回false表示停止传递控件消息。
一个完整的控件事件绑定和处理的代码如下:
void MyForm::InitWindow()
{
ui::Button* btn_login = static_cast<ui::Button*>(FindControl(L"login_button"));
btn_login->AttachClick(nbase::Bind(&MyForm::OnLoginClicked, this, std::placeholders::_1, true));
}
bool MyForm::OnLoginClicked(ui::EventArgs * msg)
{
std::wstring name = msg->pSender->GetName();
if (msg->Type == ui::kEventClick)
{
if (name == L"login_button")
{
DoLogin();
}
}
return true;
}
对每个控件都设置一个事件处理函数是很麻烦的,很多时候我们想在一个函数里处理某个容器控件内的所有控件的所有事件,这时可以使用云信Duilib的容器控件特有的AttachBubbledEvent方法,AttachBubbledEvent方法的第一个参数表示所关心的事件类型(ui::kEventAll表示所有事件),第二个参数标识事件处理函数。AttachBubbledEvent方法会把本容器及其所有子控件的事件都交给所绑定的事件处理函数。
很多时候,可以直接给m_pRoot控件调用AttachBubbledEvent方法,m_pRoot代表本窗体类的根容器,绑定它的ui::kEventAll事件就代表了处理窗体类的所有控件的所有事件。
示例代码如下:
void MyForm::InitWindow()
{
m_pRoot->AttachBubbledEvent(ui::kEventAll, nbase::Bind(&MyForm::Notify, this, std::placeholders::_1));
}
bool MyForm::Notify(ui::EventArgs * msg)
{
std::wstring name = msg->pSender->GetName();
if (msg->Type == ui::kEventClick)
{
if (name == L"login_button")
{
DoLogin();;
}
}
else if (msg->Type == ui::kEventTab)
{
//your codes
}
return true;
}
内容总结
以上是互联网集市为您收集整理的使用Duilib开发Windows软件(4)——消息传递全部内容,希望文章能够帮你解决使用Duilib开发Windows软件(4)——消息传递所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。