涉及知识点:

  1. 获取可用的屏幕个数以及分辨率
  2. SOUI中的线性布局的使用
  3. SOUI中的动态插入xml的方法(也就是动态的创建控件)
  4. 对动态创建出来的控件,进行一个点击事件的注册

目的:获取屏幕个数,生成对应的按钮,点击对应的按钮,设置窗体到对应的屏幕上;

和上一个例子的基础代码一致 这边直接上代码

void CMainDlg::OnGetScreenInfo()
{EnumDisplayMonitors(NULL, NULL, &MonitorEnumProc, reinterpret_cast<LPARAM>(&m_vctStSPCfg));//显示获取到的屏幕信息//SMessageBox(this->m_hWnd, L"Info", L"Title", MB_OK);//根据获取到的屏幕个数 动态创建两个按钮int num = m_vctStSPCfg.size();//Step1 先获取窗口的nameSWindow* pwnd = FindChildByName(L"wnd_insert");pwnd->SetAttribute(L"layout", L"hbox");   //将布局方式设置为线性布局 那么后面的按钮 就不用考虑位置 直接设置大小即可pugi::xml_document xml;SStringT KPageXml = L"<button size=\"52,52\" colorText=\"#000000\" skin=\"_skin.sys.btn.normal\" name=\"btn_screen%d\" text=\"屏幕%d\"/>";for (int i = 0; i < num; i++){SStringT strTemp = KPageXml;strTemp = SStringT().Format(strTemp, i, i);xml.load(strTemp);pwnd->CreateChildren(xml);SStringT buttonName = L"btn_screen";buttonName += SStringT().Format(L"%d", i);SWindow* pwnd = FindChildByName(buttonName);pwnd->GetEventSet()->subscribeEvent(SOUI_EVENTS::EVT_CMD, Subscriber(&CMainDlg::OnTestInsertButton, this));}
}bool CMainDlg::OnTestInsertButton(EventArgs* arg)
{SStringT name = arg->nameFrom;//SMessageBox(NULL, name, L"Title", MB_OK);if (name.Compare(L"btn_screen0") == 0){SMessageBox(NULL, L"点击了按钮0", L"", MB_OK);CRect rect = m_vctStSPCfg[0].rcScreen;MoveWindow(rect);//this->Move(rect);}else if (name.Compare(L"btn_screen1") == 0){SMessageBox(NULL, L"点击了按钮1", L"", MB_OK);CRect rect = m_vctStSPCfg[1].rcScreen;MoveWindow(rect);}return false;
}BOOL CALLBACK CMainDlg::MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
{std::vector<SCREEN_ITEM>* pVctScreen = (std::vector<SCREEN_ITEM>*)dwData;if (pVctScreen == NULL)return FALSE;//获取窗口信息MONITORINFO info;ZeroMemory(&info, sizeof(info));info.cbSize = sizeof(MONITORINFO);GetMonitorInfo(hMonitor, &info);SCREEN_ITEM item;if (info.dwFlags == MONITORINFOF_PRIMARY)item.bPrimaryMonitor = true;elseitem.bPrimaryMonitor = false;item.rcScreen = info.rcMonitor;item.rcWork = info.rcWork;pVctScreen->push_back(item);return TRUE;
}

上面需要注意两个点

  1. EnumDisplayMonitors函数的回调函数的返回值一定是TRUE 否则只能检测一个屏幕,并不会遍历
  2. 在放按钮的控件的窗口中使用线性布局,就不用考虑控件的位置了,直接设置控件的大小即可

SOUI的一个动态创建控件的小例子相关推荐

  1. asp.net 包含动态创建控件的容器如果要切换显示/隐藏不要用 Visible 属性

    asp.net 包含动态创建控件的容器如果要切换显示/隐藏不要用 Visible 属性 就是不用 XXX.Visible = false;  // true 因为这样该容器及其子控件会彻底的从页面上消 ...

  2. 在.NET上如何根据字符串动态创建控件

    在.Net上用字符串动态创建控件是通过反射来实现. 首先,利用System.Type.GetType方法,获得字符串中指定的控件的类型实例. 这里需要注意这个字符串的语法,根据msdn的解释: 按名称 ...

  3. MFC动态创建控件并响应事件代码实现过程

    MFC动态创建控件以及响应动态创建的控件的事件的实现方法如下. 1.创建对象     用new进行动态创建一个对象.然后调用Create函数创建窗口,在函数的父窗口参数中传入this或者用AfxGet ...

  4. MFC中动态创建控件以及事件响应实现方法

    本文实例讲述了MFC中动态创建控件以及事件响应实现方法,分享给大家供大家参考.具体实现方法如下: 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态 ...

  5. MFC中动态创建控件以及添加事件响应

    本文实例讲述了MFC中动态创建控件以及事件响应实现方法,分享给大家供大家参考.具体实现方法如下: 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态 ...

  6. C# 动态创建控件时注册Name属性

    动态创建控件 1.  容器控件 .RegisterName("Name",要注册的控件) //注册控件 2.  容器控件 .FindName("Name") a ...

  7. Android 动态创建控件并设置控件的大小之Android屏幕适配攻略(五)

    Android 屏幕适配攻略(五)动态创建控件并设置控件的大小 题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. 重要消息 flutter中网络请求dio使用分析 视频 ...

  8. ASP.NET动态创建控件之绝境求生

    来源:中国IT实验室 在ASP.NET中动态创建一个控件总是不那么顺利,特别是当对页面的Life Cycle不是那么了然的情况下!这里简单描述一下要求,然后提供一个解决方案,大家看看有没有更好的Ide ...

  9. C++ Builder 动态创建控件

    当开发类似解释程序或实现可视化操作功能等一类的应用程序时,都需要动态地创建控件(对象),而且还要为这些控件添加适当的事件处理程序,下面将介绍在C++Builder中如何实现基本的实现框架. 动态创建控 ...

最新文章

  1. php连接oracle10g,php连接Oracle Database 10g Express Edition
  2. 苹果公司开发Overton机器学习平台,它到底是什么?
  3. 【机器学习】最简单易懂的行人检测功能实现
  4. 腾讯 java_2019腾讯的面试题(腾讯qq音乐部门)
  5. springboot 整合mybats问题
  6. java多态可以传匿名对象吗_Java复习笔记2--匿名类和多态
  7. 实战01_SSM整合ActiveMQ支持多种类型消息
  8. 这个城市正式将电子烟纳入控烟管理 10月1日起实施
  9. 自建lol服务器,终于干正事了?英雄联盟宣布:艾欧尼亚服务器将进行扩容
  10. BZOJ 1015 [JSOI2008]星球大战starwar (逆序并查集)
  11. xps数据怎么导出为txt_如何处理XPS原始数据
  12. Ubuntu下利用QSS、WPS破解wpa/wpa2加密
  13. .NetCore下使用NPOI绘制统计图表
  14. 用拉普拉斯变换求零状态响应_什么是UPS?为什么用UPS?关于UPS电源的知识都在这里!...
  15. jsp + servlet 复习(C01)
  16. 2022-2027年中国新能源汽车功率电子行业市场全景评估及发展战略规划报告
  17. 【数学 博弈论】JZOJ_3339 wyl8899和法法塔的游戏
  18. c语言中变量属性,C语言学习笔记--C语言中变量的属性关键字
  19. 计算机季度函数,excel返回季度的五个公式
  20. 如何实现rsync远程同步和inotify实时同步

热门文章

  1. 使用 docker-compose 一键启停 Cromwell
  2. 简易本地网页文件播放电视
  3. 键盘事件keydown()与keyup()
  4. 【实战】PHP如何使用 ElasticSearch 做搜索
  5. Django学习(三)——MVC架构
  6. scp linux 命令加密码,scp命令_Linux scp 命令用法详解:加密的方式在本地主机和远程主机之间复制文件...
  7. 离子膜电解槽的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  8. 哇呼星聊即时通讯系统源码 Android+iOS+PC三端 附教程
  9. 论文阅读:TaxoExpan
  10. 中国聚氨酯市场深度调研与前景规划分析报告2022-2028年