diff --git a/CMakeLists.txt b/CMakeLists.txt index 44048a1..afa1cab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,8 +17,11 @@ include(${wxWidgets_USE_FILE}) add_executable(wxWidgetStudy main.cpp) add_executable(wxEvent event_binary.cpp src/event_demo.cpp) +add_executable(wxWindowSign window_sign_bin.cpp src/window_sign.cpp) target_link_libraries(wxWidgetStudy PRIVATE ${wxWidgets_LIBRARIES}) target_link_libraries(wxEvent PRIVATE ${wxWidgets_LIBRARIES}) +target_link_libraries(wxWindowSign PRIVATE ${wxWidgets_LIBRARIES}) set_target_properties(wxWidgetStudy PROPERTIES WIN32_EXECUTABLE TRUE) -set_target_properties(wxEvent PROPERTIES WIN32_EXECUTABLE TRUE) \ No newline at end of file +set_target_properties(wxEvent PROPERTIES WIN32_EXECUTABLE TRUE) +set_target_properties(wxWindowSign PROPERTIES WIN32_EXECUTABLE TRUE) \ No newline at end of file diff --git a/src/event_demo.h b/src/event_demo.h index a9f6037..c3a7cd6 100644 --- a/src/event_demo.h +++ b/src/event_demo.h @@ -116,9 +116,9 @@ public: void OnSize(wxSizeEvent& event); void OnButtonOK(wxCommandEvent& event); +#ifndef USE_DYNAMIC_CONNECT private: DECLARE_EVENT_TABLE() +#endif }; - - #endif \ No newline at end of file diff --git a/src/window_sign.cpp b/src/window_sign.cpp new file mode 100644 index 0000000..c16c636 --- /dev/null +++ b/src/window_sign.cpp @@ -0,0 +1,46 @@ +#include "window_sign.h" + +BEGIN_EVENT_TABLE(MyFrame, wxFrame) +EVT_MENU(wxID_ABOUT, MyFrame::OnAbout) +EVT_MENU(wxID_EXIT, MyFrame::OnQuit) +END_EVENT_TABLE() + +bool MyApp::OnInit() +{ + MyFrame* frame = new MyFrame(wxT("Minimal wxWidgets App")); + frame->Show(true); + return true; +} + +void MyFrame::OnAbout(wxCommandEvent& event) +{ + wxString msg; + msg.Printf(wxT("Hello and welcome to %s"), wxVERSION_STRING); + wxMessageBox(msg, wxT("About Minimal"), wxOK | wxICON_INFORMATION, this); +} + +void MyFrame::OnQuit(wxCommandEvent& event) +{ + Close(); +} + +MyFrame::MyFrame(const wxString& title) : wxFrame(NULL, wxID_ANY, title) +{ + // 设置窗口图标 + // SetIcon(wxIcon(mondrian_xpm)); + // 创建菜单条 + wxMenu* fileMenu = new wxMenu; + // 添加“关于”菜单项 + wxMenu* helpMenu = new wxMenu; + helpMenu->Append(wxID_ABOUT, wxT("&About...\tF1"), + wxT("Show about dialog")); + fileMenu->Append(wxID_EXIT, wxT("E&xit\tAlt-X"), wxT("Quit this program")); + // 将菜单项添加到菜单条中 + wxMenuBar* menuBar = new wxMenuBar(); + menuBar->Append(fileMenu, wxT("&File")); + menuBar->Append(helpMenu, wxT("&Help")); + // ...然后将菜单条放置在主窗口上 + SetMenuBar(menuBar); + CreateStatusBar(2); + SetStatusText(wxT("Welcome to wxWidgets!")); +} \ No newline at end of file diff --git a/src/window_sign.h b/src/window_sign.h new file mode 100644 index 0000000..6001b33 --- /dev/null +++ b/src/window_sign.h @@ -0,0 +1,123 @@ +#ifndef WINDOW_SIGN +#define WINDOW_SIGN + +#include "wx/wx.h" + +/* + 窗口标识符是在事件系统中用来唯一确定窗口的整数。事实上,在整个应用程序的范围内,窗口标识符不必一定 + 是唯一的,而只要在某个固定的上下文(比如说,在一个frame窗口和它的所有子窗口)内是唯一的就可以了。举例 + 来说:你可以在无数个对话框中使用wxID_OK这个标识符,只要在某个对话框内不要重复使用就可以了。 + 如果在窗口的构造函数中使用wxID_ANY作为其标识符,则意味着你希望wxWidgets自动为你生成一个标识符。 + 这或者是因为你不关心这个标识符的值,或者是因为这个窗口不需要处理任何事件,或者是因为你将在同一个地 + 方处理所有的事件。如果是最后一种情况,在使用 wxEvtHandler::Connect函数或者在静态事件表中,你应该使 + 用wxID_ANY作为窗口的标识符。wxWidgets自动创建的标识符是总是一个负数,所以永远不会和用户定义的窗 + 口标识符重复,用户定义的窗口标识符只能是正整数。 + 下表列举了wxWidgets提供的一些标准的标识符。你应该尽可能的使用这些标识符,这是由于下面一些原因。某 + 些系统会给特定的标识符提供一些小图片(例如GTK+系统上的OK和取消按钮)或者提供默认的处理函数(例如自动 + 产生wxID_CANCEL事件来响应Escape键)。在 Mac OS X系统上,wxID_ABOUT, wxID_PREFERENCES和 + wxID_EXIT菜单项也有特别的处理。另外一些wxWidgets的控件也会自动处理标识符为 wxID_COPY, + wxID_PASTE或 wxID_UNDO等的一些菜单或者按钮的命令。 + + 标识符名称 描述 + wxID_ANY 让wxWidgets自动产生一个标识符 + wxID_LOWEST 最小的系统标识符值 (4999) + wxID_HIGHEST 最大的系统标识符值 (5999) + 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_PREVIEW 打印预览 + wxID_ABOUT 显示一个用来描述整个程序的对话框 + wxID_HELP_CONTENTS 显示上下文帮助 + wxID_HELP_COMMANDS 显示应用程序命令 + wxID_HELP_PROCEDURES 显示应用程序过程 + wxID_HELP_CONTEXT 未使用 + 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_FILE1 to wxID_FILE9 显示最近使用的文件 + wxID_OK 确定 + wxID_CANCEL 取消 + wxID_APPLY 应用变更 + wxID_YES YES + wxID_NO 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 放大到100% + wxID_ZOOM_FIT 缩放到整页 + wxID_ZOOM_IN 放大 + wxID_ZOOM_OUT 缩小 + wxID_UNDELETE 反删除 + wxID_REVERT_TO_SAVED 恢复到上次保存的状态 + + 为了避免你自己定义的标识符和这些预定义的标识符重复,你可以使用大于wxID_HIGHEST的标识符或者小于wxID_LOWEST的标识符。 +*/ + +class MyApp : public wxApp { +public: + virtual bool OnInit(); +}; + +class MyFrame : public wxFrame { +public: + MyFrame(const wxString& title); + void OnQuit(wxCommandEvent& event); + void OnAbout(wxCommandEvent& event); + +private: + DECLARE_EVENT_TABLE() +}; + + +#endif \ No newline at end of file diff --git a/window_sign_bin.cpp b/window_sign_bin.cpp new file mode 100644 index 0000000..e1165fd --- /dev/null +++ b/window_sign_bin.cpp @@ -0,0 +1,4 @@ +#include "src/window_sign.h" + +IMPLEMENT_APP(MyApp) +DECLARE_APP(MyApp) \ No newline at end of file