Chinaunix首页 | 论坛 | 博客
  • 博客访问: 30525
  • 博文数量: 7
  • 博客积分: 290
  • 博客等级: 二等列兵
  • 技术积分: 85
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-08 14:29
文章分类

全部博文(7)

文章存档

2010年(7)

我的朋友

分类: BSD

2010-10-01 10:40:57

从类 wxRichTextCtrl中派生类myRichTextCtrl, 并重载函数 OnContextMenu(wxContextMenuEvent& event)

#include <wx/richtext/richtextctrl.h>

// text.h
class myRichTextCtrl : public wxRichTextCtrl
{
    public:
        myRichTextCtrl(wxWindow *parent, wxWindowID id,
                       const wxString &value,
                       const wxPoint &pos, const wxSize &size,
                       long style
                       );
        ~myRichTextCtrl();
        void OnContextMenu(wxContextMenuEvent& event);
// 重载函数 OnContextMenu
    DECLARE_EVENT_TABLE()
};

// text.cpp
BEGIN_EVENT_TABLE(myRichTextCtrl, wxRichTextCtrl)
    EVT_CONTEXT_MENU(myRichTextCtrl::OnContextMenu)
END_EVENT_TABLE()

myRichTextCtrl::myRichTextCtrl(wxWindow *parent, wxWindowID id,
                       const wxString &value,
                       const wxPoint &pos, const wxSize &size,
                       long style
                       )
                :wxRichTextCtrl(parent,id, value)

{

}

myRichTextCtrl::~myRichTextCtrl()
{

}

void myRichTextCtrl::OnContextMenu(wxContextMenuEvent& event)
{
    if (event.GetEventObject() != this) // 这句很关键,只有当鼠标wxRichTextCtrl在内才能弹出右菜单
    {
        event.Skip();
        return;
    }

    wxPoint point = event.GetPosition();
    point = ScreenToClient(point);
    wxMenu menu;
    menu.Append(idMenuCopy,_T("Copy"));
    menu.Append(idMenuCut,_T("Cut"));
    menu.Append(idMenuPaste,_T("Paste"));
    menu.Append(idMenuDel,_T("Delete"));
    menu.AppendSeparator();
    menu.Append(idMenuQuit,_T("E&xit"));

    PopupMenu(&menu, point.x, point.y);
}


阅读(583) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~