nim_duilib之msgbox用法(23)
概述
- 本文将介绍 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);
}
nim_duilib之msgbox用法(23)的更多相关文章
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
- 【VBA】MsgBox用法
MsgBox用法: Sub subMsgBox() Dim iok As Byte iok = MsgBox("是否XXX", vbYesNoCancel + vbQuestion ...
- msgbox用法
http://www.w3school.com.cn/vbscript/func_msgbox.asp VBScript MsgBox 函数 VBScript 函数参考手册 定义和用法 MsgBox ...
- nim_duilib之virtualListbox用法(22)
概述 本文将介绍virtualListbox的用法. 更多请参考源码. 一个样式 样式丑了点,勿喷. 重写函数 使用virtualListbox, 需要一个派生类(继承自基类VirtualListIn ...
- excel vba 数据分析
(Visual Basic Application) VBA(Visual Basic for Application)是Microsoft Office系列软件的内置编程语言,其语法结构与Visua ...
- selenium webdriver (python) 第一版PDF
前言 如果你是一位有python语言基础的同学,又想通过python+ selenium去实施自动化,那么你非常幸运的找到了这份文档,我也非常荣幸能为你的自动化学习之路带来一丝帮助. 其实,我在sel ...
- <老友记>学习笔记
这是六个人的故事,从不服输而又有强烈控制欲的monica,未经世事的千金大小姐rachel,正直又专情的ross,幽默风趣的chandle,古怪迷人的phoebe,花心天真的joey——六个好友之间的 ...
- selenium webdriver (python)
selenium webdriver (python) 第一版PDF Posted on 2013-08-30 22:59 虫师 阅读(221) 评论(0) 编辑 收藏 前言 如果你是一位有pytho ...
- selenium webdriver (python)的基本用法一
阅在线 AIP 文档:http://selenium.googlecode.com/git/docs/api/py/index.html目录一.selenium+python 环境搭建........ ...
随机推荐
- GWAS数据分析常见的202个问题?
生信其实很简单,就是用别人的工具调参就行了.生信也很折腾,哪一步都可能遇到问题,随时让你疯掉(老辩证法了~).但是,你遇到的问题大部分人也都经历过.这时,检索技能就显得很重要了.平时Biostar和S ...
- Redis高并发处理常见问题及解决方案
1. 大型电商系统高流量系统设计 场景: 大量电商系统每天要处理上亿请求,其中大量请求来自商品访问.下单.商品的详情是时刻变化,由于请求量过大,不会频繁去服务端获取商品信息,导致服务器压力极大.需要用 ...
- Yii2 源码分析 入口文件执行流程
Yii2 源码分析 入口文件执行流程 1. 入口文件:web/index.php,第12行.(new yii\web\Application($config)->run()) 入口文件主要做4 ...
- 完美png图片添加水印类
完美png图片添加水印类 被添加水印图片和水印图片都可以是png,保证透明无色背景,可调节透明度 <?phpclass Imgshuiyin{ /* 缩略图相关常量定义 */ const THU ...
- kubernetes部署Docker私有仓库Registry
在后面的部署过程中,有很多的docker镜像文件,由于kubernetes是使用国外的镜像,可能会出现下载很慢或者下载不下来的情况,我们先搭建一个简单的镜像服务器,我们将需要的镜像下载回来,放到我们自 ...
- Redis(一)【基础入门】
目录 一.大型网站的系统特点 二.大型网站架构发展历程 三.从NoSQL说起 四.Redis简介 五.Redis安装 1.上传并解压 2.安装C语言编译环境 3.修改安装位置 4.编译安装 5.启动R ...
- 大数据学习day25------spark08-----1. 读取数据库的形式创建DataFrame 2. Parquet格式的数据源 3. Orc格式的数据源 4.spark_sql整合hive 5.在IDEA中编写spark程序(用来操作hive) 6. SQL风格和DSL风格以及RDD的形式计算连续登陆三天的用户
1. 读取数据库的形式创建DataFrame DataFrameFromJDBC object DataFrameFromJDBC { def main(args: Array[String]): U ...
- 商业爬虫学习笔记day3
一. 付费代理发送请求的两种方式 第一种方式: (1)代理ip,形式如下: money_proxy = {"http":"username:pwd@192.168.12. ...
- 二叉树——Java实现
1 package struct; 2 3 interface Tree{ 4 //插入元素 5 void insert(int value); 6 //中序遍历 7 void inOrder(); ...
- UIImageView总结
UIImageView UIKit框架提供了非常多的UI控件,但并不是每一个都很常用,有些控件可能1年内都用不上,有些控件天天用,比如UIButton.UILabel.UIImageView.UITa ...