【wxWidgets】wxWidgets之窗口标识符一

窗口标识符

窗口标识符是在事件系统中用来唯一确定窗口的整数。事实上,在整个应用程序的范围内,窗口标识符不必一定是唯一的,而只要在某个固定的上下文(比如说,在一个frame窗口和它的所有子窗口)内是唯一的就可以了。举例来说:你可以在无数个对话框中使用wxID_OK这个标识符,只要在某个对话框内不要重复使用就可以了。
wxWidgets自动创建的标识符是总是一个负数,所以永远不会和用户定义的窗口标识符重复,用户定义的窗口标识符只能是正整数。
wxWidgets定义了一个特殊的标识符值wxID_ANY,用于以下两种情况:

  • 创建新窗口时,您可以指定wxID_ANY以使wxWidgets自动分配未使用的标识符
  • 当使用事件表宏或wxEvtHandler :: Connect安装事件处理程序时,可以使用它来指示您要处理来自任何控件的事件,而不管其标识符如何

另一个标准的特殊标识符值为wxID_NONE:这是一个与任何其他ID不匹配的值。

wxWidgets还定义了一些标准的命令标识符,可以由用户代码使用,也有时候由wxWidgets本身使用。这些保留标识符都在wxID_LOWESTwxID_HIGHEST之间的范围内,因此,用户代码应避免在此范围内定义自己的常量。

    wxID_LOWEST = 4999,

    wxID_OPEN,
    wxID_CLOSE,
    wxID_NEW,
    wxID_SAVE,
    wxID_SAVEAS,
    wxID_REVERT,
    wxID_EXIT,
    wxID_UNDO,
    wxID_REDO,
    wxID_HELP,
    wxID_PRINT,
    wxID_PRINT_SETUP,
    wxID_PAGE_SETUP,
    wxID_PREVIEW,
    wxID_ABOUT,
    wxID_HELP_CONTENTS,
    wxID_HELP_INDEX,
    wxID_HELP_SEARCH,
    wxID_HELP_COMMANDS,
    wxID_HELP_PROCEDURES,
    wxID_HELP_CONTEXT,
    wxID_CLOSE_ALL,

    wxID_EDIT = 5030,
    wxID_CUT,
    wxID_COPY,
    wxID_PASTE,
    wxID_CLEAR,
    wxID_FIND,
    wxID_DUPLICATE,
    wxID_SELECTALL,
    wxID_DELETE,
    wxID_REPLACE,
    wxID_REPLACE_ALL,
    wxID_PROPERTIES,

    wxID_VIEW_DETAILS,
    wxID_VIEW_LARGEICONS,
    wxID_VIEW_SMALLICONS,
    wxID_VIEW_LIST,
    wxID_VIEW_SORTDATE,
    wxID_VIEW_SORTNAME,
    wxID_VIEW_SORTSIZE,
    wxID_VIEW_SORTTYPE,

    wxID_FILE = 5050,
    wxID_FILE1,
    wxID_FILE2,
    wxID_FILE3,
    wxID_FILE4,
    wxID_FILE5,
    wxID_FILE6,
    wxID_FILE7,
    wxID_FILE8,
    wxID_FILE9,

    //标准按钮ID
    wxID_OK = 5100,
    wxID_CANCEL,
    wxID_APPLY,
    wxID_YES,
    wxID_NO,
    wxID_STATIC,
    wxID_FORWARD,
    wxID_BACKWARD,
    wxID_DEFAULT,
    wxID_MORE,
    wxID_SETUP,
    wxID_RESET,
    wxID_CONTEXT_HELP,
    wxID_YESTOALL,
    wxID_NOTOALL,
    wxID_ABORT,
    wxID_RETRY,
    wxID_IGNORE,

    wxID_UP,
    wxID_DOWN,
    wxID_HOME,
    wxID_REFRESH,
    wxID_STOP,
    wxID_INDEX,

    wxID_BOLD,
    wxID_ITALIC,
    wxID_JUSTIFY_CENTER,
    wxID_JUSTIFY_FILL,
    wxID_JUSTIFY_RIGHT,
    wxID_JUSTIFY_LEFT,
    wxID_UNDERLINE,
    wxID_INDENT,
    wxID_UNINDENT,
    wxID_ZOOM_100,
    wxID_ZOOM_FIT,
    wxID_ZOOM_IN,
    wxID_ZOOM_OUT,
    wxID_UNDELETE,
    wxID_REVERT_TO_SAVED,

    //系统菜单ID(由wxUniv使用):
    wxID_SYSTEM_MENU = 5200,
    wxID_CLOSE_FRAME,
    wxID_MOVE_FRAME,
    wxID_RESIZE_FRAME,
    wxID_MAXIMIZE_FRAME,
    wxID_ICONIZE_FRAME,
    wxID_RESTORE_FRAME,

    //通用文件对话框使用的ID(从该值开始连续13个)
    wxID_FILEDLGG = 5900,

    wxID_HIGHEST = 5999
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
wxWidgets是一个跨平台的GUI库,可以在Windows、Linux、macOS等系统上开发应用程序。有时候我们需要在应用程序中创建一个无标题栏窗口,常见的场景是实现自定义的窗口样式或者全屏窗口等。 但是,有时候我们会发现无标题栏窗口无法拖动,这是因为窗口拖动的操作通常是在标题栏上进行的,但是该窗口并没有标题栏。 为了解决这个问题,我们可以通过鼠标的移动事件来实现窗口的拖动。具体来说,我们需要在窗口类中重载鼠标按下、鼠标松开和鼠标移动等事件函数。当鼠标按下时记录鼠标的位置,当鼠标移动时计算相对于鼠标按下时的位置偏移量,并根据偏移量来移动窗口的位置。当鼠标松开时结束拖动操作。 代码实现如下: ``` class MyFrame : public wxFrame { public: MyFrame(wxWindow* parent, const wxString& title) : wxFrame(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, wxFRAME_NO_TASKBAR | wxNO_BORDER | wxFRAME_FLOAT_ON_PARENT) { // 设置背景色为白色 SetBackgroundColour(wxColour(255, 255, 255)); } protected: wxPoint m_dragPos; void OnMouseDown(wxMouseEvent& event) { if (event.LeftIsDown()) { m_dragPos = event.GetPosition(); } } void OnMouseUp(wxMouseEvent& event) { if (event.LeftIsUp()) { wxPoint pos = GetPosition(); pos.x += event.GetPosition().x - m_dragPos.x; pos.y += event.GetPosition().y - m_dragPos.y; SetPosition(pos); } } void OnMouseMove(wxMouseEvent& event) { if (event.Dragging() && event.LeftIsDown()) { wxPoint pos = GetPosition(); pos.x += event.GetPosition().x - m_dragPos.x; pos.y += event.GetPosition().y - m_dragPos.y; SetPosition(pos); } } wxDECLARE_EVENT_TABLE(); }; wxBEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_LEFT_DOWN(MyFrame::OnMouseDown) EVT_LEFT_UP(MyFrame::OnMouseUp) EVT_MOTION(MyFrame::OnMouseMove) wxEND_EVENT_TABLE() ``` 在这个例子中,我们创建了一个名为MyFrame的无标题栏窗口,通过重载OnMouseDown、OnMouseUp和OnMouseMove等事件函数来实现窗口的拖动。其中,m_dragPos变量用于保存鼠标按下时的位置,OnMouseDown函数记录该位置,OnMouseUp函数计算偏移量并移动窗口的位置,OnMouseMove函数实时更新鼠标的位置并调整窗口的位置。 最后,我们还需要在类定义中通过wxDECLARE_EVENT_TABLE宏来声明该类所处理的事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值