wxWidgets学习(过滤事件,通过继承改变默认事件表)

1. 前言

最近需要学习wxWidgets,看了看书,还是比较通俗易懂的。本博客根据书籍《使用wxwidgets进行跨平台程序开发》第三章3.3 过滤某个事件的案例进行编写的。

2. 正文

2.1 创建项目

暂时略过,网上有讲如何配置环境和创建项目的教程,本文不使用界面编辑器,全代码。

2.2 生成一个新类MyTextCtrl,继承自wxTextCtrl

MyTextCtrl 头文件

#ifndef MYTEXTCTRL_H
#define MYTEXTCTRL_H

#include <wx/wx.h>


class MyTextCtrl : public wxTextCtrl
{
	public:
		MyTextCtrl();
		virtual ~MyTextCtrl();
		//声明处理事件的函数
		void OnChar(wxKeyEvent& event);
	protected:

	private:
		//声明事件表
		DECLARE_EVENT_TABLE()

};

#endif // MYTEXTCTRL_H

MyTextCtrl cpp文件

#include "MyTextCtrl.h"

// 初始化事件表
BEGIN_EVENT_TABLE(MyTextCtrl,wxTextCtrl)
// 绑定键盘按下的事件
EVT_KEY_DOWN(MyTextCtrl::OnChar)
END_EVENT_TABLE()


MyTextCtrl::MyTextCtrl()
{
	//ctor
}

MyTextCtrl::~MyTextCtrl()
{
	//dtor
}
// 键盘按下的事件
void MyTextCtrl::OnChar(wxKeyEvent& event)
{

	//如果是字母
    if(wxIsalpha(event.GetKeyCode()))
	{
        //继续寻找父类的事件表
		event.Skip();
	}else
	{
		//获取按键值
		int code = event.GetKeyCode();
		wxString msg = wxString::Format(wxT("%d"),code);
		wxMessageBox(msg,wxT("过滤"));

		//放弃,事件将不会处理
		event.Skip(false);
		// 书中的这个方法不知道什么意思
		//wxBell();
	}
}

2.3 在主窗口上添加MyTextCtrl控件

3. 结尾 

最后发现第一个数字总是能出现在编辑框中,不知道为什么。

下文地址:https://blog.csdn.net/q893332169/article/details/102462457

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
wxWidgets中,我们可以通过继承wxTaskBarIcon类来处理任务栏按钮的事件。下面是一个示例代码,演示了如何使用wxWidgets处理任务栏按钮的点击事件: ```cpp #include <wx/wx.h> class MyTaskBarIcon : public wxTaskBarIcon { public: MyTaskBarIcon() { // 在构造函数中添加任务栏按钮 SetIcon(wxICON(wxLOGO), "My TaskBar Icon"); } void OnLeftButtonDClick(wxTaskBarIconEvent& event) { // 处理任务栏按钮的双击事件 wxMessageBox("TaskBar Icon Double Clicked!"); } void OnMenuOpen(wxCommandEvent& event) { // 处理任务栏按钮的右键菜单打开事件 wxMessageBox("TaskBar Icon Menu Opened!"); } wxMenu* CreatePopupMenu() { // 创建任务栏按钮的右键菜单 wxMenu* menu = new wxMenu; menu->Append(wxID_OPEN, "Open"); menu->Append(wxID_CLOSE, "Close"); return menu; } wxDECLARE_EVENT_TABLE(); }; wxBEGIN_EVENT_TABLE(MyTaskBarIcon, wxTaskBarIcon) EVT_TASKBAR_LEFT_DCLICK(MyTaskBarIcon::OnLeftButtonDClick) EVT_MENU(wxID_OPEN, MyTaskBarIcon::OnMenuOpen) EVT_MENU(wxID_CLOSE, MyTaskBarIcon::OnMenuClose) wxEND_EVENT_TABLE() class MyApp : public wxApp { public: bool OnInit() { // 创建应用程序的主窗口 wxFrame* frame = new wxFrame(NULL, wxID_ANY, "My App"); frame->Show(); // 创建任务栏按钮 MyTaskBarIcon* taskBarIcon = new MyTaskBarIcon; taskBarIcon->SetIcon(wxICON(wxLOGO), "My TaskBar Icon"); return true; } }; wxIMPLEMENT_APP(MyApp); ``` 在上面的代码中,我们首先创建了一个自定义的MyTaskBarIcon类,继承自wxTaskBarIcon类。在构造函数中,我们使用SetIcon()函数添加了一个任务栏按钮。然后,我们重写了OnLeftButtonDClick()函数和CreatePopupMenu()函数来处理任务栏按钮的双击事件和右键菜单打开事件。最后,我们使用宏定义wxDECLARE_EVENT_TABLE()和wxBEGIN_EVENT_TABLE()来声明和定义事件,将事件与相应的处理函数关联起来。 在应用程序的主函数中,我们创建了一个主窗口,并创建了一个MyTaskBarIcon对象来添加任务栏按钮。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值