wxWidgets控件处理事件的传统方法是使用事件表,2.9.0版本后新增了动态绑定方式。

这个小程序包含两个按钮(wxButton)和一个文本框(wxStaticText)。两个按钮采用不同的方式处理点击事件,第一个按钮采用静态事件表,第二个按钮采用动态绑定,点击按钮,按钮计数值增加;文本框负责打印当前窗口的宽高,采用动态绑定,输出随着窗口大小改变。

// C++11编译
#include <wx/wx.h>class MyApp : public wxApp {
public:virtual bool OnInit();
};class MyFrame : public wxFrame {
public:    MyFrame(const wxString &title, const wxPoint &pos, const wxSize &size);private:        wxButton* button1 = nullptr;wxButton* button2 = nullptr;wxStaticText *text = nullptr;void OnButton_1(wxCommandEvent&);void OnButton_2(wxCommandEvent&);void OnSize(wxSizeEvent &event);wxDECLARE_EVENT_TABLE(); // 声明静态事件表建议放在类的尾部,因为这个宏改变了可见性
};// 唯一的控件ID
enum {ID_BUTTON_1 = 1, ID_BUTTON_2, ID_TEXT
};// 按钮1使用静态事件表绑定点击事件
wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)EVT_BUTTON(ID_BUTTON_1, MyFrame::OnButton_1)
wxEND_EVENT_TABLE()// 启动程序
wxIMPLEMENT_APP(MyApp);// 成员函数实现
bool MyApp::OnInit() {// 创建 MyFrame 窗口,设置标题,窗口位置,窗口大小MyFrame *frame = new MyFrame("Demo", wxPoint(50,50), wxSize(450, 340));frame->Show(true); // 显示窗口return true; // 返回true表示继续进程,false表示立即终止程序
}MyFrame::MyFrame(const wxString &title, const wxPoint &pos, const wxSize &size): wxFrame(nullptr, wxID_ANY, title, pos, size) {SetBackgroundColour("#339933"); // 修改frame背景颜色为绿色button1 = new wxButton(this, ID_BUTTON_1, "static event table:0");button2 = new wxButton(this, ID_BUTTON_2, "dynamic bind:0");text = new wxStaticText(this, ID_TEXT, "");button2->SetPosition({0, 50});text->SetPosition({0, 100});button2->Bind(wxEVT_BUTTON, &MyFrame::OnButton_2, this); // 按钮2动态绑定点击事件Bind(wxEVT_SIZE, &MyFrame::OnSize, this); // 动态绑定frame大小修改事件
}void MyFrame::OnButton_1(wxCommandEvent&) {static int cnt = 0;button1->SetLabel(wxString::Format("static event table:%d", ++cnt));
}void MyFrame::OnButton_2(wxCommandEvent&) {static int cnt = 0;button2->SetLabel(wxString::Format("dynamic bind:%d", ++cnt));
}void MyFrame::OnSize(wxSizeEvent &event) {wxSize size = event.GetSize();text->SetLabel(wxString::Format("width:%d\nheight:%d",size.GetWidth(),size.GetHeight()));
}

wxWidgets学习 (2) -- 事件处理相关推荐

  1. 【原】iOS学习之事件处理的原理

    在iOS学习23之事件处理中,小编详细的介绍了事件处理,在这里小编叙述一下它的相关原理 1.UITouch对象 在触摸事件的处理方法中都会有一个存放着UITouch对象的集合,这个参数有什么用呢? ( ...

  2. jQuery学习---------认识事件处理

    3种事件模型: 原始事件模型 DOM事件模型 IE事件模型 原始事件模型(0级事件模型) 1.事件处理程序被定义为函数实例,然后绑定到DOM元素事件对象上,实现事件的注册. 例子:var btn = ...

  3. wxWidgets学习 (1) -- Hello World 详解

    wxWidgets 是一个跨平台的 C++ GUI 框架,和 qt 其实是一类东西. 简单介绍一下wxWidgets的优点: 一.原生界面 wx 不像 java swing 这样,在所有平台都使用相同 ...

  4. Mr.J--JS学习(事件处理函数包装)

    //elem: Element,type: EventString, handle: EventListener //事件处理函数function addEvent(elem,type,handle) ...

  5. Vue学习2 - 事件处理以及绑定、事件、遍历、判断、元素显示、DOM属性的绑定、comput计算属性值

    文章目录 1. 事件处理.以及Vue生命周期函数.事件描述符 1.1 基本用法 1.2 获取事件对象,阻止默认行为.事件冒泡行为.事件描述符 2. for循环 2.1 基本数据类型数组的遍历 2.2 ...

  6. wxWidgets学习笔记(2)wxWidgets体系结构

    1 体系结构 wxWidgets的体系结构下图所示.wxWidgets的体系结构可以分为4层:wxWidgets公共API层,各个平台Port,用于各个平台的API以及操作系统. 2 Librarie ...

  7. WxWidgets学习笔记-1-1-环境搭建Codeblocks-WxWidgets

    方法1:自己编译 记得用管理员打开CMD或者PowerShell mingw32-make -f makefile.gcc clean mingw32-make -f makefile.gcc MON ...

  8. jQuery学习:事件处理(绑定事件 解绑事件 事件委派/委托))

    <div class="outer">外部div<div class="inner">内部div</div></div ...

  9. wxWidgets刚開始学习的人导引(3)——wxWidgets应用程序初体验

    wxWidgets刚開始学习的人导引全文件夹   PDF版及附件下载 1 前言 2 下载.安装wxWidgets 3 wxWidgets应用程序初体验 4 wxWidgets学习资料及利用方法指导 5 ...

最新文章

  1. 双柱状图柱子数量比较多_微生物组数据冲击图和柱状图一条代码解决
  2. 网闸与防火墙的区别_网关和网闸、防火墙的区别?
  3. 干货 | 携程是如何做AB实验分流的
  4. Android开发之动态添加WebView实现进度条标题栏展示效果
  5. 7-23 还原二叉树 (25 分)(分析加详解)
  6. 区块链教程(二):基础概念介绍
  7. 安装Fiddler后无法上网的问题
  8. TypeScript入门学习笔记
  9. java开发mac pro_苹果三款神秘 Mac 现身 macOS Big Sur 11.0.1 beta
  10. 将文件转成base64 字符串
  11. latex 首行不缩进,第二行开始缩进,悬挂缩进的LaTeX实现
  12. 杨辉三角形延伸(菱形)
  13. Java 多线程学习(4)浅析 LongAdder、LongAccumulator 和 Striped64 的底层实现原理
  14. GOOGLE 人机验证(RECAPTCHA)无法显示解决方案(可解决大多数 CSP 问题)
  15. IOS 将文字写绘制成图片并转换为像素数据
  16. “ 这片绿茵从不缺乏天才,努力才是最终的入场券——梅西 ”
  17. 用实际例子详细探究OpenCV的轮廓绘制函数drawContours()
  18. Python+vue+elementui高考志愿填报辅助系统django
  19. java访问局域网共享资源
  20. html可以向微信发信息吗,微信不加好友也能发消息?怎么做到的?

热门文章

  1. 线上redis一般安在linux_redis的zset有多牛?请把耳朵递过来
  2. 在Hyperopt框架下使用XGboost与交叉验证
  3. 初等数论四大基本定理
  4. 全面解析Java的垃圾回收机制
  5. python生成一定范围的符合正态分布的数
  6. 拔掉网线时Socket的检查方法
  7. socket编程之gethostbyname获取IP列表和Host别名列表
  8. ON_NOTIFY消息中的id坑了我一天
  9. 蓝牙HCI剖析(二)
  10. adaboost和GBDT的区别以及xgboost和GBDT的区别