概述

  • 本文将介绍 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)的更多相关文章

  1. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  2. 【VBA】MsgBox用法

    MsgBox用法: Sub subMsgBox() Dim iok As Byte iok = MsgBox("是否XXX", vbYesNoCancel + vbQuestion ...

  3. msgbox用法

    http://www.w3school.com.cn/vbscript/func_msgbox.asp VBScript MsgBox 函数 VBScript 函数参考手册 定义和用法 MsgBox ...

  4. nim_duilib之virtualListbox用法(22)

    概述 本文将介绍virtualListbox的用法. 更多请参考源码. 一个样式 样式丑了点,勿喷. 重写函数 使用virtualListbox, 需要一个派生类(继承自基类VirtualListIn ...

  5. excel vba 数据分析

    (Visual Basic Application) VBA(Visual Basic for Application)是Microsoft Office系列软件的内置编程语言,其语法结构与Visua ...

  6. selenium webdriver (python) 第一版PDF

    前言 如果你是一位有python语言基础的同学,又想通过python+ selenium去实施自动化,那么你非常幸运的找到了这份文档,我也非常荣幸能为你的自动化学习之路带来一丝帮助. 其实,我在sel ...

  7. <老友记>学习笔记

    这是六个人的故事,从不服输而又有强烈控制欲的monica,未经世事的千金大小姐rachel,正直又专情的ross,幽默风趣的chandle,古怪迷人的phoebe,花心天真的joey——六个好友之间的 ...

  8. selenium webdriver (python)

    selenium webdriver (python) 第一版PDF Posted on 2013-08-30 22:59 虫师 阅读(221) 评论(0) 编辑 收藏 前言 如果你是一位有pytho ...

  9. selenium webdriver (python)的基本用法一

    阅在线 AIP 文档:http://selenium.googlecode.com/git/docs/api/py/index.html目录一.selenium+python 环境搭建........ ...

随机推荐

  1. (数据科学学习手札132)Python+Fabric实现远程服务器连接

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 日常工作中经常需要通过SSH连接到多台远程 ...

  2. 分布式事务(4)---最终一致性方案之TCC

    分布式事务(1)-理论基础 分布式事务(2)---强一致性分布式事务解决方案 分布式事务(3)---强一致性分布式事务Atomikos实战 强一致性分布式事务解决方案要求参与事务的各个节点的数据时刻保 ...

  3. 巩固javaweb第十天

    巩固内容: HTML <meta> 元素 meta标签描述了一些基本的元数据. <meta> 标签提供了元数据.元数据也不显示在页面上,但会被浏览器解析. META 元素通常用 ...

  4. 26. Linux GIT

    windows git 下载链接: Msysgit   https://git-scm.com/download/win 1 进入git bash进行第一次配置 git config --global ...

  5. 虚拟机中安装centos系统的详细过程

    linux-centos的安装 检查电脑是否开启虚拟化,只有开启虚拟化才能安装虚拟机 新建虚拟机 鼠标点进去,选中红框所示,回车 登录: 输入默认用户名(超级管理员 root) 密码:安装时设置的密码

  6. 使用WtmPlus低代码平台提高生产力

    低代码平台的概念很火爆,产品也是鱼龙混杂. 对于开发人员来说,在使用绝大部分低代码平台的时候都会遇到一个致命的问题:我在上面做的项目无法得到源码,完全黑盒.一旦我的需求平台满足不了,那就是无解.   ...

  7. SpringBoot-RestTemplate测试Controller

    1.功能测试类 package com.imooc.controller; import java.io.IOException; import java.math.BigDecimal; impor ...

  8. HelloWorldMBean

    package mbeanTest; public interface HelloWorldMBean { public String getHello(); public void setHello ...

  9. ubantu上编辑windows程序

    命令简记 cd $GOROOT/src cp -r $GOROOT /root/go1.4 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 ./make.bash 操作 ...

  10. final&static

    final 1.final修饰类,那么该类不能有子类,那么也就没有子类重写父类的方法,也就没有多态 2.final修饰成员变量,那么成员变量要么显式赋值(用第一种),要么在构造方法中赋值 无论哪一种, ...