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