nim_duilib(12)之menu(2)
introduction
- 更多控件用法,请参考 here 和 源码。
- 本文将介绍menu的选项注册回调
before starting
本文的代码基于上一篇
stage1
回到项目demo_xml, 继续编辑。
BasicForm.h
BasicForm 类中继续增加下面的函数
// 处理菜单弹选项点击事件
bool OnMenuItemClicked(ui::EventArgs* msg);
该函数用做处理菜单选项的点击。
BasicForm.cpp
OnSettingsBtnClicked函数
settings按钮关联的回调函数是OnSettingsBtnClicked。现在,增加后的函数体如下:
bool BasicForm::OnSettingsBtnClicked(ui::EventArgs* msg)
{
// 点击设置按钮,弹出菜单
RECT rect = msg->pSender->GetPos();
ui::CPoint point;
point.x = rect.left - 175;
point.y = rect.top + 10;
ClientToScreen(m_hWnd, &point);
nim_comp::CMenuWnd* pmenu = new(std::nothrow) nim_comp::CMenuWnd(NULL);
if (pmenu)
{
ui::STRINGorID xml(L"settings_menu.xml");
pmenu->Init(xml, _T("xml"), point);
// 菜单选项注册回调
//----------------------------------------------------------------------------------------
auto bind_func = [this](nim_comp::CMenuElementUI* pitem)
{
if (pitem)
pitem->AttachSelect(nbase::Bind(&BasicForm::OnMenuItemClicked, this, std::placeholders::_1));
};
nim_comp::CMenuElementUI* pmenu_item1 = (nim_comp::CMenuElementUI*)pmenu->FindControl(L"menu_item1");
nim_comp::CMenuElementUI* pmenu_item2 = (nim_comp::CMenuElementUI*)pmenu->FindControl(L"menu_item2");
nim_comp::CMenuElementUI* pmenu_item3 = (nim_comp::CMenuElementUI*)pmenu->FindControl(L"menu_item3");
bind_func(pmenu_item1);
bind_func(pmenu_item2);
bind_func(pmenu_item3);
}
return false;
}
其中,相对上一篇, 仅增加了下面的代码:
// 菜单选项注册回调
//----------------------------------------------------------------------------------------
auto bind_func = [this](nim_comp::CMenuElementUI* pitem)
{
if (pitem)
pitem->AttachSelect(nbase::Bind(&BasicForm::OnMenuItemClicked, this, std::placeholders::_1));
};
nim_comp::CMenuElementUI* pmenu_item1 = (nim_comp::CMenuElementUI*)pmenu->FindControl(L"menu_item1");
nim_comp::CMenuElementUI* pmenu_item2 = (nim_comp::CMenuElementUI*)pmenu->FindControl(L"menu_item2");
nim_comp::CMenuElementUI* pmenu_item3 = (nim_comp::CMenuElementUI*)pmenu->FindControl(L"menu_item3");
bind_func(pmenu_item1);
bind_func(pmenu_item2);
bind_func(pmenu_item3);
我当时这里卡了,不知道怎么给菜单的选项关联回调函数。后来观察源码demo后发现,需要为每一个菜单选项关联回调函数。就像上面的代码一样,找到每一个菜单选项,进行关联。我这里的代码,三个菜单选项都关联的是同一个回调函数。
OnMenuItemClicked函数
这个函数是处理点击菜单选项的回调函数。 其函数体如下:
bool BasicForm::OnMenuItemClicked(ui::EventArgs* msg)
{
if (msg)
{
std::wstring str = msg->pSender->GetName() + std::wstring(L"\n\n");
LPCWSTR result = str.c_str();
OutputDebugString(result);
}
return false;
}
当点击弹出的菜单选项时,将执行这个函数。这个函数将输出到VS的输出窗口中。
演示输出
nim_duilib(12)之menu(2)的更多相关文章
- nim_duilib(11)之menu(1)
introduction 更多控件用法,请参考 here 和 源码. 本文的代码基于这里 本文将介绍menu控件 xml文件添加代码 基于上一篇, 继续向basic.xml中添加下面的代码. xml完 ...
- Total Commander 8.52 Beta 1
Total Commander 8.52 Beta 1http://www.ghisler.com/852_b1.php 10.08.15 Release Total Commander 8.52 b ...
- CentOS6.4安装Smokeping节点监控软件
Smokeping:它是rrdtool的作者制作的,在图形显示方面很漂亮,可以用来很好的检测网络状态和稳定性,下面简单说一下Smokeping的安装以及配置方法. 0.首先关闭selinux和防火墙 ...
- PowerDesigner 根据NAME属性自动生成表和列注释(不用写脚本)
PowerDesigner 11 menu: [Database]->[Database Generation] tab: [Tables & Views]->check tabl ...
- 3D效果导航代码
*, *:before, *:after { padding:; margin:; box-sizing: border-box; } .menu { list-style: none; width: ...
- dictionary (key-value) (map容器)
#dictionary可以保存不同类型的值 menu = {'fish0':14.50} list = [] menu['fish1'] = 10.1 # Adding new key-value p ...
- Android slidingmenu详细解释 滑动的优化
Android slidingmenu 详细解释 性能优化 转载请注明: http://blog.csdn.net/aaawqqq 简单介绍 SlidingMenu 是github 上Androi ...
- CSS3基础(3)——CSS3 布局属性全接触
一. 弹性盒模型 1.弹性盒子模型介绍 弹性盒模型(Flexible Box或Flexbox)是一个CSS3新增布局模块,官方称为CSS Flexible Box Layout Module,用于实现 ...
- 自动化安装smokeping-2.6.11脚本
自动化安装Smokeping-2.6.11脚本 一.目的 1.1 监控目的 为方便监测各数据中心网络状况,自定义全国各节点,从而发现网络异常,判断网络故障. 1.2 本文目的 快速部署Smokepin ...
随机推荐
- MYSQL5.8----M4-5
mysql> CREATE TABLE joson( id INT AUTO_INCREMENT PRIMARY KEY, context JSON NOT NULL)// Query OK, ...
- R语言因子排序
画图的时候,排序是个很重要的技巧,比如有时候会看下基因组每条染色体上的SNP的标记数量,这个时候直接做条形图是一种比较直观的方法,下面我们结合实际例子来看下: 在R环境下之际构建一个数据框,一列染色体 ...
- MySQL 的查询优化
说起 MySQL 的查询优化,相信大家收藏了一堆奇技淫巧:不能使用 SELECT *.不使用 NULL 字段.合理创建索引.为字段选择合适的数据类型..... 你是否真的理解这些优化技巧?是否理解它背 ...
- 3.Median of Two Sorted Arrays Leetcode
难度系数:5星 /*************************************************************************** 题目:有两个排好序的数组,要求 ...
- Redis | Redis常用命令及示例总结(API)
目录 前言 1. Key(键) 1.1 键的基本操作功能 del move sort rename renamenx migrate 1.2 键的获取功能 type exists randomkey ...
- 每日自动健康打卡(Python+腾讯云服务器)
每日自动健康打卡(Python+腾讯云服务器) 1.配置需要 python3.7,Chrome或者Edeg浏览器,Chrome驱动或者Edge驱动 #需要配置selenium库,baidu-aip库, ...
- 第二个基础框架 — spring — xml版,没用注解 — 更新完毕
1.什么是spring? 老规矩:百度百科一手 这上面说得太多了,我来提炼一下: spring就是一个轻量级的控制反转( IOC ) 和 面向切面编程( AOP ) 的容量框架.总的来说:本质就是对j ...
- A Child's History of England.29
You have not forgotten the New Forest which the Conqueror made, and which the miserable people whose ...
- OpenStack之五: image镜像服务(端口9292)
官网地址:https://docs.openstack.org/glance/stein/install/install-rdo.html #:创建glance库,并授权 MariaDB [(none ...
- JAVA平台AOP技术研究
3.1 Java平台AOP技术概览 3.1.1 AOP技术在Java平台中的应用 AOP在实验室应用和商业应用上,Java平台始终走在前面.从最初也是目前最成熟的AOP工具--AspectJ,到目前已 ...