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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章