commit 5cfc4e3bd8cd1d242128b19ee5663a05a1be9d12 Author: taynpg Date: Thu Jan 25 12:56:32 2024 +0800 start diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..4ed25d6 --- /dev/null +++ b/.clang-format @@ -0,0 +1,17 @@ +# .clang-format + +# 风格格式化 +BasedOnStyle: Google +# 4 空格缩进 +IndentWidth: 4 +# 连续对齐变量的声明 +AlignConsecutiveDeclarations: true +# 指针左侧对齐 +PointerAlignment: Left +# 访问说明符(public、private等)的偏移 +AccessModifierOffset: -4 +# 大括号 +BreakBeforeBraces: Custom +BraceWrapping: + # 函数定义后面大括号在新行 + AfterFunction: true diff --git a/.clangd b/.clangd new file mode 100644 index 0000000..11d6e06 --- /dev/null +++ b/.clangd @@ -0,0 +1,12 @@ +Hover: + ShowAKA: Yes +Diagnostics: + UnusedIncludes: None # 禁用未使用头文件提示 + Suppress: [ + anon_type_definition, # 禁用匿名的typedef提示 + unused-variable, # 禁用未使用变量提示 + unused-function, # 禁用未使用函数提示 + unused-includes, # 禁用未使用的头文件提示 + ] + ClangTidy: + Remove: misc-unused-alias-decls diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c795b05 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..17dc76d --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,34 @@ +{ + "files.autoSave": "onFocusChange", + "editor.fontSize": 14, + "editor.fontFamily": "'FiraCode Nerd Font Mono', 'FiraCode Nerd Font Mono', 'FiraCode Nerd Font Mono'", + "cmake.configureOnOpen": true, + "cmake.debugConfig": { + "console": "integratedTerminal" + }, + "cmake.environment": { + "PATH": "${env:PATH};C:\\binary\\wxWidgets-3.2.4\\lib\\vc_x64_dll" + }, + "cmake.options.statusBarVisibility": "visible", + "cmake.generator": "Ninja", + "C_Cpp.intelliSenseEngine": "disabled", + "clangd.arguments": [ + "--header-insertion=never", + "--all-scopes-completion", + "--completion-style=detailed", + "--clang-tidy", + "-j=4", + "--pch-storage=memory", + "--compile-commands-dir=build", + "--background-index", + "--ranking-model=heuristics", + "--function-arg-placeholders=false", + "--query-driver=repaceE" + ], + "editor.inlayHints.enabled": "off", + "editor.unicodeHighlight.allowedLocales": { + "ja": true, + "zh-hant": true, + "zh-hans": true + } +} diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..a652205 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,24 @@ +cmake_minimum_required (VERSION 3.8) +project (wxWidgetStudy) +set(CMAKE_CXX_STANDARD 11) + +set(CMAKE_PREFIX_PATH "C:\\binary\\wxWidgets-3.2.4") +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Release") +endif() +if (MSVC) + add_compile_options(/source-charset:utf-8) + add_compile_options(/EHsc) + add_compile_options(-D_CRT_SECURE_NO_WARNINGS) +endif() + +find_package(wxWidgets REQUIRED COMPONENTS core base) +include(${wxWidgets_USE_FILE}) + +add_executable(wxWidgetStudy main.cpp) +target_link_libraries(wxWidgetStudy PRIVATE ${wxWidgets_LIBRARIES}) + +set_target_properties(wxWidgetStudy + PROPERTIES + WIN32_EXECUTABLE TRUE +) \ No newline at end of file diff --git a/CMakeSettings.json b/CMakeSettings.json new file mode 100644 index 0000000..6496d34 --- /dev/null +++ b/CMakeSettings.json @@ -0,0 +1,50 @@ +{ + "configurations": [ + { + "name": "Debug-x64", + "generator": "Ninja", + "configurationType": "Debug", + "inheritEnvironments": [ "msvc_x64_x64" ], + "buildRoot": "${projectDir}\\out\\${name}", + "installRoot": "${projectDir}\\out\\install\\${name}", + "cmakeCommandArgs": "", + "buildCommandArgs": "", + "ctestCommandArgs": "" + }, + { + "name": "Debug-x86", + "generator": "Ninja", + "configurationType": "Debug", + "buildRoot": "${projectDir}\\out\\${name}", + "installRoot": "${projectDir}\\out\\install\\${name}", + "cmakeCommandArgs": "", + "buildCommandArgs": "", + "ctestCommandArgs": "", + "inheritEnvironments": [ "msvc_x86" ] + }, + { + "name": "Release-x86", + "generator": "Ninja", + "configurationType": "Release", + "buildRoot": "${projectDir}\\out\\${name}", + "installRoot": "${projectDir}\\out\\install\\${name}", + "cmakeCommandArgs": "", + "buildCommandArgs": "", + "ctestCommandArgs": "", + "inheritEnvironments": [ "msvc_x86" ], + "variables": [] + }, + { + "name": "Release-x64", + "generator": "Ninja", + "configurationType": "Release", + "buildRoot": "${projectDir}\\out\\${name}", + "installRoot": "${projectDir}\\out\\install\\${name}", + "cmakeCommandArgs": "", + "buildCommandArgs": "", + "ctestCommandArgs": "", + "inheritEnvironments": [ "msvc_x64_x64" ], + "variables": [] + } + ] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..78259a7 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# 注意 + +如果是手动在 visual studio 中使用 dll 形式的动态库,需要添加一个定义:WXUSINGDLL diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..da79d5b --- /dev/null +++ b/main.cpp @@ -0,0 +1,79 @@ +// Name: minimal.cpp +// Purpose: Minimal wxWidgets sample +// Author: Julian Smart +#include "wx/wx.h" + +// 定义应用程序类 +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() +}; + +// 有了这一行就可以使用 MyApp& wxGetApp()了 +DECLARE_APP(MyApp) +// 告诉wxWidgets主应用程序是哪个类 +IMPLEMENT_APP(MyApp) + +// 初始化程序 +bool MyApp::OnInit() +{ + // 创建主窗口 + MyFrame* frame = new MyFrame(wxT("Minimal wxWidgets App")); + // 显示主窗口 + frame->Show(true); + // 开始事件处理循环 + return true; +} +// MyFrame类的事件表 +BEGIN_EVENT_TABLE(MyFrame, wxFrame) +EVT_MENU(wxID_ABOUT, MyFrame::OnAbout) +EVT_MENU(wxID_EXIT, MyFrame::OnQuit) +END_EVENT_TABLE() + +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!")); +}