概述

  • 本文将介绍 msgbox 的用法
  • 更多用法,请参考 源码
  • 改进了原有的xml样式

一个样式

xml结构

整体垂直布局

xml源码

demo源码下的msg/msg.xml文件内容 改为如下

注意: 代码中控件的关联(我这里的xml中换了新的名字)

<?xml version="1.0" encoding="UTF-8"?>
<Window size="340,180" caption="0,0,0,34" >
<VBox width="340" height="auto" bkcolor="bk_wnd_ligt_dark"> <!--标题栏 含关闭按钮-->
<HBox class="caption" >
<Label class="font_title" name="label_title" width="stretch" margin="20,6,0,0" />
<Button class="btn_wnd_close" name="closebtn" margin="20,6,10,0"/>
</HBox> <VBox height="1">
<Control height="1" bkcolor="light_gray2" />
</VBox> <!--中间显示的内容-->
<RichEdit class="richedit_show" name="richedit_content" width="300" margin="20,30,20,30" multiline="true" vscrollbar="false" autovscroll="false" enabled="false" rich="true"/> <!--下面的按钮-->
<HBox height="auto" margin="0,0,20,20" childmargin="10" >
<Control />
<Button class="btn_global_blue_80x30" name="btn_yup" normaltextcolor="white"/>
<Button class="btn_global_white_80x30" name="btn_nope" normaltextcolor="darkcolor"/>
</HBox> </VBox>
</Window>

其中, caption的定义如下:

  <Class name="caption" height="34" bkcolor="bk_wnd_ligt_dark" />

richedit_show定义如下

  <Class name="richedit_show" font="system_18" disabledtextcolor="color_palette10" />

控件关联

void MsgBox::InitWindow()
{
m_pRoot->AttachBubbledEvent(ui::kEventClick, nbase::Bind(&MsgBox::OnClicked, this, std::placeholders::_1)); //title_ = (Label*)FindControl(L"title");
//content_ = (RichEdit*)FindControl(L"content");
//btn_yes_ = (Button*)FindControl(L"btn_yes");
//btn_no_ = (Button*)FindControl(L"btn_no"); ui::Control* pctrl = nullptr; // 1. 标题栏
pctrl = FindControl(L"label_title");
if (pctrl)
title_ = dynamic_cast<ui::Label*>(pctrl); // 2. 中间显示提示内容
pctrl = FindControl(L"richedit_content");
if (pctrl)
content_ = dynamic_cast<ui::RichEdit*>(pctrl); // 3. 按钮 确定
pctrl = FindControl(L"btn_yup");
if (pctrl)
btn_yes_ = dynamic_cast<ui::Button*>(pctrl); // 4. 按钮 取消
pctrl = FindControl(L"btn_nope");
if (pctrl)
btn_no_ = dynamic_cast<ui::Button*>(pctrl); }

代码中用法

需要定义一个回调,当msgbox退出后,可以在这个函数中获取当前选择的是哪一个按钮

	nim_comp::MsgboxCallback mc = [](nim_comp::MsgBoxRet ret)
{
if (nim_comp::MsgBoxRet::MB_YES == ret)
{
;
}
else if (nim_comp::MsgBoxRet::MB_NO == ret)
{
;
}
else
{
;
}
}; nim_comp::ShowMsgBox(m_hWnd, mc,
L"内容", false,
L"标题", false,
L"OK", false,
L"Nope", false);

如果不需要处理返回值,直接传递一个空的闭包即可


nim_comp::ShowMsgBox(m_hWnd, nim_comp::MsgboxCallback(),
L"内容", false,
L"标题", false,
L"OK", false,
L"Nope", false);

扩展

重写父类函数 HandleMessage, 实现其对ESC的响应,当然, 你可以加上对Enter按键的响应。

LRESULT MsgBox::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (uMsg == WM_KEYDOWN && wParam == VK_ESCAPE)
{
this->Close(0); return 0;
} return __super::HandleMessage(uMsg, wParam, lParam);
}

最新文章

  1. extern
  2. 在windows 与Linux间实现文件传输(C++&amp;C实现)
  3. MySQL计算销售员昨日各指标综合得分_20161206
  4. 最简单的方式理解Vue的自定义指令与混合
  5. Window Server 2008 R2 TFS2010的安装和配置
  6. 《12个有趣的C语言问答》评析2
  7. nano编辑器的设置
  8. ASP.NET Core教程【一】关于Razor Page的知识
  9. 【JavaScript流程控制语句的用法及练习】
  10. php设计模式七 ---组合模式
  11. linux下安装ruby版本管理器RVM
  12. 22、删除链表的倒数第N个节点
  13. json对象和字符串的相互转换
  14. 使用Charles对iPhone进行Http(s)请求拦截(抓包)
  15. poj1094 恶心题,,每次加边进行判断
  16. Lucene源码
  17. Django的form组件
  18. 牛客网 PAT 算法历年真题 1001 : A+B和C (15)
  19. Sonar理论篇
  20. python之路---04 列表 元组

热门文章

  1. excel-合并多个Excel文件--VBA合并当前目录下所有Excel工作簿中的所有工作表
  2. php5.6升级7
  3. 非标准的xml解析器的C++实现:一、思考基本数据结构的设计
  4. 利用charles映射解决夜神模拟器安装xposed-v89-sdk25-x86.zip
  5. ctfshow WEB入门 信息收集 1-20
  6. Java 监控基础 - 使用 JMX 监控和管理 Java 程序
  7. 大数据学习----day27----hive02------1. 分桶表以及分桶抽样查询 2. 导出数据 3.Hive数据类型 4 逐行运算查询基本语法(group by用法,原理补充) 5.case when(练习题,多表关联)6 排序
  8. 零基础学习java------day6----数组
  9. 多人协作解决方案,git flow的使用
  10. HelloWorldMBean