`
dqifa
  • 浏览: 116348 次
社区版块
存档分类
最新评论

通过重载实现修改wxWidgets文本处理框wxTextCtrl和wxRichTextCtrl的右键弹出菜单

 
阅读更多

       wxWidget中这块是写死的,这让我感到非常郁闷,而且没有提供一些简单的配置工具,关于右键弹出菜单,我们可以通过下面这段代码来看它是怎么实现的:

void wxTextCtrl::OnContextMenu(wxContextMenuEvent& event)
{
#if wxUSE_RICHEDIT
    if (IsRich())
    {
        if (!m_privateContextMenu)
        {
            m_privateContextMenu = new wxMenu;
            m_privateContextMenu->Append(wxID_UNDO, _("&Undo"));
            m_privateContextMenu->Append(wxID_REDO, _("&Redo"));
            m_privateContextMenu->AppendSeparator();
            m_privateContextMenu->Append(wxID_CUT, _("Cu&t"));
            m_privateContextMenu->Append(wxID_COPY, _("&Copy"));
            m_privateContextMenu->Append(wxID_PASTE, _("&Paste"));
            m_privateContextMenu->Append(wxID_CLEAR, _("&Delete"));
            m_privateContextMenu->AppendSeparator();
            m_privateContextMenu->Append(wxID_SELECTALL, _("Select &All"));
        }
        PopupMenu(m_privateContextMenu);
        return;
    }
    else
#endif
    event.Skip();
}
        我们可以通过重载这个函数来自定义我们的弹出菜单,假设我们要实现一个用于预览的文本框,那么我们可以这样写:

#include <wx/wx.h>
#include <wx/textctrl.h>

class CPreviewTextCtrl : public wxTextCtrl
{
public:
CPreviewTextCtrl(
   wxWindow *parent, wxWindowID id, const wxString &value=wxEmptyString, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=0, const wxValidator &validator=wxDefaultValidator, const wxString &name=wxTextCtrlNameStr
   );

public:
// 重写右键菜单
void OnContextMenu(wxContextMenuEvent& event);

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

      由于OnContextMenu不是虚函数所以我们不能光重载它,还需要在消息事件表中去重新注册它,否则我们还是会继续调用父类的OnContextMenu,然后弹出下面这些东西:

        通过下面的代码我们去重新注册这个事件:

BEGIN_EVENT_TABLE(CPreviewTextCtrl, wxTextCtrl)
EVT_CONTEXT_MENU(CPreviewTextCtrl::OnContextMenu)
END_EVENT_TABLE()

        接下来我们再定制我们自己的弹出菜单:

CPreviewTextCtrl::CPreviewTextCtrl( wxWindow *parent, wxWindowID id, const wxString &value/* =wxEmptyString */, const wxPoint &pos/* =wxDefaultPosition */, const wxSize &size/* =wxDefaultSize */, long style/* =0 */, const wxValidator &validator/* =wxDefaultValidator */, const wxString &name/* =wxTextCtrlNameStr */ ):
wxTextCtrl( parent, id, value, pos, size, style, validator )
{
}

void CPreviewTextCtrl::OnContextMenu(wxContextMenuEvent& event)
{
if (IsRich())
{
   if (!m_privateContextMenu)
   {
    m_privateContextMenu = new wxMenu;
//     m_privateContextMenu->Append(wxID_UNDO, _("&Undo"));
//     m_privateContextMenu->Append(wxID_REDO, _("&Redo"));
//    m_privateContextMenu->AppendSeparator();
//    m_privateContextMenu->Append(wxID_CUT, _("Cu&t"));
    m_privateContextMenu->Append(wxID_COPY, /*_("&Copy")*/ GetSearchLocalize(wxT("PreviewCopy")));
//    m_privateContextMenu->Append(wxID_PASTE, _("&Paste"));
//    m_privateContextMenu->Append(wxID_CLEAR, _("&Delete"));
    m_privateContextMenu->AppendSeparator();
    m_privateContextMenu->Append(wxID_SELECTALL, GetSearchLocalize(wxT("PreviewSelectAll"))/*_("Select &All")*/);
   }
   PopupMenu(m_privateContextMenu);
   return;
}
else
{
   event.Skip();
}
}

 

       好了,我们把不需要的删除掉,然后加入我们自己的本地化系统,效果如图:

       考虑到我们要实现的预览是只读功能,所以我们创建的时候还需要注意下Style的参数:

m_pPreviewText = new CPreviewTextCtrl( m_pRightSplitter, TS_ID_SEARCH_RESULT_PREVIEW, ::GetSearchLocalize(wxT("PreviewWindow")),
   wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY|wxHSCROLL|wxTE_RICH );

 

from:http://hi.baidu.com/dbfr2011818/item/d670f4c040cea02e47d5c004

分享到:
评论

相关推荐

    右键弹出菜单及画图

    在IT领域,右键弹出菜单和画图是常见的用户界面功能,特别是在Windows操作系统中。右键菜单,也称为上下文菜单,为用户提供了一种快速访问相关操作的方式,而画图则是指在屏幕上进行图形绘制的技术。下面我们将深入...

    基于wxwidgets实现的自定义菜单

    总结来说,基于wxWidgets实现自定义菜单涉及了扩展`wxButton`以创建菜单按钮,利用`wxPopupWindow`构建下拉菜单,以及使用`wxMenu`和`wxMenubar`进行菜单定制。通过灵活运用这些组件和类,开发者可以构建出既美观又...

    vc++个性化的弹出菜单

    1. **菜单资源**:在VC++中,菜单通常作为资源存在,开发者可以在资源编辑器中定义菜单项,包括它们的文本、快捷键和关联的处理函数。通过这种方式,可以创建基本的菜单结构。 2. **右键菜单**:弹出菜单通常是通过...

    PopMenu弹出式窗口

    PopMenu弹出式窗口在计算机编程中是一种常见的用户界面元素,它通常用于提供额外的选项或功能,当用户与主菜单、按钮或其他交互元素交互时出现。这种设计使得用户能够快速访问更多的操作,而不必占据屏幕上的固定...

    彈出式菜單

    在编程中,弹出式菜单的实现通常涉及到事件监听和处理。例如,在Windows应用程序开发中,我们可以使用MFC(Microsoft Foundation Classes)库来创建弹出式菜单。当用户在单文档界面(SDI)中右键点击时,我们需要...

    C++ 图形界面 实现文本编辑框输入同步显示到静态文本框

    本项目涉及的核心知识点是“C++图形界面”以及如何实现文本编辑框输入的实时同步显示。C++提供了多种库来创建GUI,如Qt、wxWidgets、GTK+等,但这里我们更可能关注的是Windows操作系统上的Microsoft Foundation ...

    右键菜单效果

    右键菜单的设计和实现是软件开发中的一个重要环节,它涉及到用户界面(UI)设计和人机交互(HCI)原则。一个好的右键菜单应该简洁明了,提供最常用的功能,同时避免过多的选项导致用户困惑。 在Windows操作系统中,...

    wxSimpleEditor:用 C++ 和 wxWidgets 2.8 编写的简单文本编辑器

    2. **wxWidgets 库**:wxWidgets 提供了一组丰富的控件和窗口类,如 `wxFrame`(主窗口)、`wxTextCtrl`(文本控件)和 `wxMenu`(菜单)。开发者可以使用这些类来构建界面,实现诸如打开、保存文件、复制粘贴等文本...

    wxWidgets入门 深入 查询

    **wxWidgets入门与深入查询** ...通过深入学习其API、事件处理机制和布局管理,开发者可以创建出具有原生外观和感觉的高质量应用程序。在学习过程中,利用好各种资源和社区支持,将极大地促进学习效率和项目成功率。

    使用wxwidgets进行跨平台程序开发(中文版)_wxWidgets学习_wxWidgets_

    **wxWidgets 概述** wxWidgets 是一个开源的 C++ 库,它允许开发者使用标准的 C++ 编程语法创建跨平台的图形...通过不断学习和实践,开发者可以利用 wxWidgets 实现自己的创新想法,同时享受到跨平台开发带来的便利。

    wxWidgets和MFC混合编程

    wxWidgets和MFC混合编程的优点在于,可以充分利用wxWidgets的跨平台特性和MFC的丰富的控件库,实现更加灵活和强大的应用程序开发。 在一个程序中使用wxWidgets和MFC混合编程需要解决两个主要问题:如何在一个程序...

    wxCalc -- wxWidgets开发的计算器

    `wxButton`用于创建按钮,而`wxTextCtrl`用于创建可以显示和编辑文本的控件,例如计算器的显示屏。 **事件处理** 在wxWidgets中,事件处理是通过继承`wxEvtHandler`并重写相应的事件处理函数来实现的。例如,对于...

    商业编程-源码-定制编辑框的上下文菜单.zip

    例如,在Windows API中,我们可以使用`CreatePopupMenu`创建一个弹出菜单,然后使用`AppendMenu`添加菜单项,最后通过`TrackPopupMenu`在编辑框上显示这个菜单。在其他库中,这个过程可能会有所不同,但基本思想是...

    wxWidgets中文教程带实例.zip

    “wxWidgets_examples”目录中的例子通常是官方提供的演示程序,它们覆盖了 wxWidgets 的各个功能模块,如简单的“Hello World”程序,到更复杂的多窗口应用、对话框、菜单和工具栏的实现。通过分析这些例子,你可以...

    wxwidgets 第一个程序

    wxWidgets 使用基于事件驱动的模型,事件处理函数通常通过重载 `wxEvtHandler` 类的成员函数实现。例如,你可以为按钮添加点击事件处理,或者监听窗口的大小改变事件。 9. **布局管理** wxWidgets 提供了多种布局...

    使用wxWidgets进行跨平台程序开发

    - 掌握高级控件的使用,如列表框、树形控件、菜单栏和工具栏。 - 学习如何使用数据库接口(如ODBC或SQLite)与wxWidgets集成。 - 熟悉国际化和本地化支持,使应用程序能够适应不同语言环境。 - 探索图形绘制和图像...

    wxWidgets 串口在visual stdio 2010环境下的实现

    总之,通过wxWidgets和wxctb-0.9,开发者可以轻松地在Visual Studio 2010环境下构建支持串口通信的GUI应用程序,从而实现与各种硬件设备的有效交互。理解并熟练掌握这些技术,对于开发涉及串口通信的项目来说至关...

    《使用wxWidgets进行跨平台程序开发》光盘例子源码

    1. **窗口和控件**:wxWidgets提供了丰富的窗口和控件类,如按钮、文本框、单选按钮、复选框、菜单、对话框等。通过这些类,开发者可以创建用户界面并处理用户的交互。 2. **事件处理**:wxWidgets的事件模型允许...

    嵌入式图像开发wxWidgets

    嵌入式图像开发中,wxWidgets是一个至关重要的工具,它为开发者提供了强大的跨平台能力,使得应用...通过深入学习和熟练掌握wxWidgets,开发者可以构建出美观且功能丰富的用户界面,同时避免了不同平台间移植的困扰。

    wxwidgets 教程

    - **可扩展性**:允许开发者自定义控件和功能,通过继承和重写实现扩展。 - **高性能**:优化了图形渲染和资源管理,确保应用的流畅性和响应速度。 **1.3 安装与配置** 安装wxWidgets通常涉及下载源代码包或预编译...

Global site tag (gtag.js) - Google Analytics