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
相关推荐
基于wxbutton使用自定义Button创建菜单按钮,基于wxpopupwindow实现下拉菜单,定制菜单栏的高度和背景颜色,外观还是蛮美观的。
全书共有20章,第·1·章简要介绍了·wxWidgets·的发展历史和框架结构,第2章介绍了wxWidgets的程序框架及其实现,第3章深入剖析了wxWidgets的事件处理机制,第4~11章详细讲述了wxWidgets的图形用户界面、数据结构...
wxSimpleEditor 用 C++ 和 wxWidgets 2.8 编写的简单文本编辑器。 在 GNU GPL v3 许可下。
wxWidgets和MFC混合编程 讲述在一个程序中wxWidgets和MFC的窗口如何一起工作。
分别在glut界面和wxWidgets界面下 实现shadow volume 而shadow volume的实现依赖于Nehe教程中的方法 即在CPU下执行阴影锥体的计算 想要获得更加高效的方法请参考其他的阴影实现方法 或是使用geometryShader
wxwidgets是一个 c++编写的用来提供gui开发的框架。它包含一个可以支持现今几乎所有操作系统(Version 2 currently supports all desktop versions of MS Windows, Unix with GTK+, Unix with Motif, and MacOS. An ...
wxWidgets 完整的buid demo vc6 support ///////////////////////////////////////////////////////////////////////////////////// 1. 看见很多人都在为build这关苦恼 本人在开源研究的比较多,也希望正规化,是...
这是一部学习wxWidgets的基础文档,能够让你快速的学习
用wxWidgets的API实现UDP服务端功能。
使用,程序员可以通过重载这些方法来实现定制的行为,一个典型GUI程序所作的事情包括:显示一个包含各种空间的窗口,在窗口中绘制特定的图形或者图像, 响应来自鼠标、键盘以及其他输入设备的输入,和其他的进程通信...
若nothing to do之类的,打开Settings->Comppiler->ToolChain executables->Auto Detect(进行检测CodeBlocks的路径是不是复制到环境变量中,(其中CodeBlocks和wxWidgets的配置与安装见我的博客)) 如果还是不...
wxWidgets標榜使用其函式庫所開發的軟體只需要對原始碼做少量更改(或者完全不用更改),就能在各種不同的作業平台上編譯並執行。目前可支援Windows、Apple Macintosh、Linux/Unix(轉譯成X11、GTK+、Motif等函式庫...
wxWidgets2.8.10完全版和CodeBlocks8.02windows安装版(带mingw)
(1)编写简单win32 application,了解程序的框架,掌握它...(2)修改win32 application,添加资源,尝试增添新的功能,通过网络学习加载头文件和链接类库的方法。 (3)通过网络,了解wxWidgets,并掌握它的安装和配置方法。
wxwidgets开发入门 API查询 深入学习wxwidgets
wxwidgets在windows下的安装使用文件
wxWidgets 2.8.9 all in one, 一个全得版本,在unix得 solaris上测试通过, 效果很好。
1. 很多程序需要根据处理业务的进度来更新进度条,进度条的目的是让用户能知道业务处理的进度,有进度条的程序更友好,让用户知道程序在运行,而不是没有响应。 博文: ...
wxWidgets跨平台界面开发,一次开发,全平编译运行。
WIN版本的wxWidgets-3.1.3.zip wxWidgets源码 来自官网 下载链接 https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.3/wxWidgets-3.1.3.zip 不想花积分的可以直接下载。