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 环境搭建........ ...
随机推荐
- 【R读取报错】解决: Can't bind data because some arguments have the same name
最近读取一个数据时,报如标题的错误. args[1] <- "RT_10-VS-RT_0" all <- read.delim(paste0(args[1]," ...
- Qt5的安装和编译
Ubuntu18.04安装Qt5 1.配置unbuntu 和宿主机共享文件夹安装vmware-tools 2.下载 Qt http://download.qt.io/archive/qt/ 3.修改 ...
- ceph安装部署
环境准备 测试环境是4台虚拟机,所有机器都是刚刚安装好系统(minimal),只配置完网卡和主机名的centos7.7,每个osd增加一块磁盘,/dev/sdb ceph-admin ---- adm ...
- Spark(二十)【SparkSQL将CSV导入Kudu】
目录 SparkSql 将CSV导入kudu pom 依赖 scala 代码 启动脚本 SparkSql 将CSV导入kudu pom 依赖 <properties> <spark. ...
- Python 基于python实现的http+json协议接口自动化测试框架源码(实用改进版)
目录 1. 写在前面 2. 开发环境 3. 大致流程 4. 框架简介 5. 运行结果展示 6. 文件与配置 7. 测试接口实例 n ...
- 实现nfs持久挂载+autofs自动挂载
实验环境: 两台主机 node4:192.168.37.44 NFS服务器 node2:192.168.37.22 客户端 在nfs服务器,先安装nfs和rpcbind [root@node4 fen ...
- 【C/C++】最长不下降子序列/动态规划
#include <iostream> #include <vector> using namespace std; int main() { //输入 int tmp; ve ...
- Java基础语法与流程控制
Java基础语法与流程控制 跟着狂神学Java的第二天O(∩_∩)O~,养成一个总结的习惯 志同道合的小伙伴可以一起学习狂神的视频 本节地址:https://www.kuangstudy.com/co ...
- IDE常用插件
IDE 常用插件集合 :
- 30个类手写Spring核心原理之AOP代码织入(5)
本文节选自<Spring 5核心原理> 前面我们已经完成了Spring IoC.DI.MVC三大核心模块的功能,并保证了功能可用.接下来要完成Spring的另一个核心模块-AOP,这也是最 ...