处理事件从wxTextCtrl在wxFrame - c++ /wxWidgets
Handling events from wxTextCtrl on wxFrame - C++/wxWidgets
我有一个由wxFrame
派生的MyFrame
。在此框架中添加一个wxTextCtrl
。我可以在框架中处理这个文本控件的EVT_KEY_DOWN
吗?类似的,
BEGIN_EVENT_TABLE(wxTextCtrl, wxControl)
EVT_KEY_DOWN(MyFrame::OnKeyDown)
END_EVENT_TABLE()
上面的代码似乎不工作。文档说明这样的事件只能由事件起源的对象来处理。那么我应该子类wxTextCtrl
来处理这个并以某种方式将信息发送到帧吗?
做这件事的最好方法是什么?
子控件的wxCommandEvent
和wxNotifyEvent
类型事件被设置为自动向上传播到父框架。然而,wxKeyEvent
是从wxEvent
派生出来的,所以它不会传播到父框架。那么,您可以使用动态事件处理程序将一些事件路由到任何wxEvtHandler
派生对象。
在wxWidgets 2.8下你应该使用wxEvtHandler::Connect
。这里描述这种方法。您也可以看看这个示例代码。
在wxWidgets 2.9和SVN下,您应该使用wxEvtHandler::Bind<>
:
MyFrame::MyFrame(...)
{
m_textcontrol->Bind(wxEVT_KEY_DOWN, &MyFrame::OnTextControlKeyDown, this);
}
此处描述wxEvtHandler::Bind<>
方法
是的,子类wxtextCtrl来处理父框架中的按键。
class cSpecialTextCtrl : public wxTextCtrl
{
public:
cSpecialTextCtrl( ... ) : wxTextCtrl( ... ) {}
void OnKeyDown( wxKeyEvent& ev );
private:
DECLARE_EVENT_TABLE()
};
当然还有
BEGIN_EVENT_TABLE( cSpecialTextCtrl , wxTextCtrl)
EVT_KEY_DOWN( cSpecialTextCtrl ::OnKeyDown)
END_EVENT_TABLE()
在方法中,将事件传递给MyFrame
void cSpecialTextCtrl::OnKeyDown( wxKeyEvent& ev )
{
((MyFrame*)GetParent())->OnKeyDown( ev );
}
相关文章:
- 什么是事件表 (wxWidgets)?
- 无法编译wxWidgets Hello World
- CMake WxWidgets项目成功地在Linux上构建,但没有在Windows上构建
- 内存所有位置 wxWidgets
- С++ wxWidgets:代码架构,设计原则和模式
- 将 Win32/WinAPI 应用程序移植到 wxWidgets
- 从 wxWidgets 中的.DLL加载图标
- 使用 Visual Studio 2019 构建 Hello World wxwidgets 应用程序时出错
- C++ wxWidgets:在创建小部件后设置字体
- C++ wxWidgets:更改大小器的字体
- meson-build:wxWidgets 资源文件,用于 Windows 未构建
- Visual Studio中的wxwidgets应用程序给出错误"LNK2019 unresolved external symbol"
- 如何在 wxWidgets 中使用 SetTabBehavior 进行C++?
- 在 wxWidgets 中的 wxTextCtrl 上手动触发 ENTER 键按下事件C++?
- 如何从代码本身向 wxwidgets 中的文本控件插入字符?
- wxWidgets 3.1.3 图标在 mac 下加载 - ICNS 文件不可读?
- wxWidgets 拖放文件事件处理程序初始化问题(无效static_cast)
- 如何将位图拉伸到父面板(wxWidgets 自定义)
- 使用标准窗口与wxWidgets一起绘制?
- 如何使用CLion和MSVC编译器工具链编译wxWidgets Hello World应用程序而没有错误?