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的输出窗口中。

演示输出

最新文章

  1. 教你实践ASP.NET Core Authorization
  2. Sharepoint client model 中出现Cannot invoke HTTP DAV request. There is a pending query 的解决办法
  3. (python)对象的引用
  4. 本BLOG简介(内有一道UVa524素数环进阶版)【B001】
  5. nginx+php 安装手册
  6. memcached工作原理与优化建议
  7. css笔记——关于 body/html 的高度百分比
  8. poj1988 简单并查集
  9. Appium同时运行多个设备
  10. 解决failed to push some refs to
  11. sqlserver 存储过程 查询
  12. C++进阶:新人易入的那些坑 --1.常量、常指针和指针常量
  13. Telephone Lines [POJ3662] [二分答案]
  14. gis和threejs的学习资料
  15. [Oracle][Metadata]如何查找与某一个功能相关的数据字典名
  16. 10.1.翻译系列:EF 6中的实体映射【EF 6 Code-First系列】
  17. [转]查看处于被锁状态的表:v$locked_object dba_objects v$session all_objects v$sqlarea v$lock
  18. 2D游戏中的碰撞检测:圆形与矩形碰撞检测(Javascrip版)
  19. 20145209刘一阳 《网络对抗》逆向及BOF基础实践
  20. Educational Codeforces Round 8 D. Magic Numbers 数位DP

热门文章

  1. fluidity详解
  2. expr判断文件名以固定格式结尾
  3. 【NCBI教程】资源汇总整理 (转载)
  4. open 函数小结
  5. SPI详解2
  6. 学习java的第十五天
  7. [源码解析] PyTorch分布式优化器(2)----数据并行优化器
  8. Local Classes in C++
  9. Virtual Destructor
  10. mybatis-扩展