admin
2024-05-17 b8871bd7a15792247950dd0719656ecba73ef667
添加可转债交易
11个文件已添加
1033 ■■■■■ 已修改文件
CBTrade/CBTrade.vcxproj 192 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CBTrade/CBTrade.vcxproj.filters 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CBTrade/CBTrade.vcxproj.user 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CBTrade/MainFrame.cpp 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CBTrade/MainFrame.h 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CBTrade/MyNetworkApi.cpp 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CBTrade/MyNetworkApi.h 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CBTrade/ViewManager.cpp 428 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CBTrade/ViewManager.h 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CBTrade/main.cpp 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CBTrade/packages.config 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CBTrade/CBTrade.vcxproj
New file
@@ -0,0 +1,192 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|Win32">
      <Configuration>Release</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|x64">
      <Configuration>Debug</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|x64">
      <Configuration>Release</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <VCProjectVersion>16.0</VCProjectVersion>
    <Keyword>Win32Proj</Keyword>
    <ProjectGuid>{8bff1459-65b0-4a91-b278-d1ef8fa3e031}</ProjectGuid>
    <RootNamespace>CBTrade</RootNamespace>
    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v142</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v142</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v142</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v142</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Label="Shared">
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <LinkIncremental>true</LinkIncremental>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <LinkIncremental>false</LinkIncremental>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <LinkIncremental>true</LinkIncremental>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <LinkIncremental>false</LinkIncremental>
  </PropertyGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <SDLCheck>false</SDLCheck>
      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
      <AdditionalIncludeDirectories>..\wxWidgets-3.2.4\include;..\wxWidgets-3.2.4\include\msvc;..\wxCharts\include;..\gmsdk\include;..\lib_config\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
      <AdditionalLibraryDirectories>..\wxWidgets-3.2.4\lib\vc_lib;..\wxCharts\lib\vc_lib;..\gmsdk\lib\win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <AdditionalDependencies>wxchartsd.lib;gmsdk.lib;%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <SDLCheck>false</SDLCheck>
      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
      <AdditionalIncludeDirectories>..\wxWidgets-3.2.4\include;..\wxWidgets-3.2.4\include\msvc;..\wxCharts\include;..\gmsdk\include;..\lib_config\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <GenerateDebugInformation>true</GenerateDebugInformation>
      <AdditionalLibraryDirectories>..\wxWidgets-3.2.4\lib\vc_lib;..\wxCharts\lib\vc_lib;..\gmsdk\lib\win32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <AdditionalDependencies>wxcharts.lib;gmsdk.lib;%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <SDLCheck>false</SDLCheck>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
      <AdditionalIncludeDirectories>..\wxWidgets-3.2.4\include;..\wxWidgets-3.2.4\include\msvc;..\wxCharts\include;..\gmsdk\include;..\lib_config\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
      <AdditionalLibraryDirectories>..\wxWidgets-3.2.4\lib\vc_x64_lib;..\wxCharts\lib\vc_x64_lib;gmsdk\lib\win64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <AdditionalDependencies>wxchartsd.lib;gmsdk.lib;%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <SDLCheck>false</SDLCheck>
      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
      <AdditionalIncludeDirectories>..\wxWidgets-3.2.4\include;..\wxWidgets-3.2.4\include\msvc;..\wxCharts\include;..\gmsdk\include;..\lib_config\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <GenerateDebugInformation>true</GenerateDebugInformation>
      <AdditionalLibraryDirectories>..\wxWidgets-3.2.4\lib\vc_x64_lib;..\wxCharts\lib\vc_x64_lib;..\gmsdk\lib\win64;..\lib_config\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <AdditionalDependencies>wxcharts.lib;gmsdk.lib;libconfig++.lib;%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup>
    <ClCompile Include="..\common_nopch\ConfigUtil.cpp" />
    <ClCompile Include="..\common_nopch\md5.cpp" />
    <ClCompile Include="..\common_nopch\NetworkApi.cpp" />
    <ClCompile Include="..\common_nopch\SocketManager.cpp" />
    <ClCompile Include="..\common_nopch\WidgetsRenderUtil.cpp" />
    <ClCompile Include="..\common_nopch\Win32Util.cpp" />
    <ClCompile Include="main.cpp" />
    <ClCompile Include="MainFrame.cpp" />
    <ClCompile Include="MyNetworkApi.cpp" />
    <ClCompile Include="ViewManager.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="..\common_nopch\ConfigUtil.h" />
    <ClInclude Include="..\common_nopch\JsonUtil.h" />
    <ClInclude Include="..\common_nopch\md5.h" />
    <ClInclude Include="..\common_nopch\NetworkApi.h" />
    <ClInclude Include="..\common_nopch\SocketManager.h" />
    <ClInclude Include="..\common_nopch\StringUtil.h" />
    <ClInclude Include="..\common_nopch\TimeUtil.h" />
    <ClInclude Include="..\common_nopch\WidgetsRenderUtil.h" />
    <ClInclude Include="..\common_nopch\Win32Util.h" />
    <ClInclude Include="MainFrame.h" />
    <ClInclude Include="MyNetworkApi.h" />
    <ClInclude Include="ViewManager.h" />
  </ItemGroup>
  <ItemGroup>
    <None Include="packages.config" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
    <Import Project="..\packages\tencent.rapidjson.1.1.1\build\tencent.rapidjson.targets" Condition="Exists('..\packages\tencent.rapidjson.1.1.1\build\tencent.rapidjson.targets')" />
  </ImportGroup>
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('..\packages\tencent.rapidjson.1.1.1\build\tencent.rapidjson.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\tencent.rapidjson.1.1.1\build\tencent.rapidjson.targets'))" />
  </Target>
</Project>
CBTrade/CBTrade.vcxproj.filters
New file
@@ -0,0 +1,96 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Filter Include="源文件">
      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
      <Extensions>cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx</Extensions>
    </Filter>
    <Filter Include="头文件">
      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
      <Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
    </Filter>
    <Filter Include="资源文件">
      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
    </Filter>
    <Filter Include="头文件\common">
      <UniqueIdentifier>{b3ab7b2c-6fce-467c-bdd0-4a4b5d2bf93e}</UniqueIdentifier>
    </Filter>
    <Filter Include="源文件\common">
      <UniqueIdentifier>{e1eb4e05-1830-4cc3-98b1-ad5f7db894cc}</UniqueIdentifier>
    </Filter>
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="main.cpp">
      <Filter>源文件</Filter>
    </ClCompile>
    <ClCompile Include="MainFrame.cpp">
      <Filter>源文件</Filter>
    </ClCompile>
    <ClCompile Include="ViewManager.cpp">
      <Filter>源文件</Filter>
    </ClCompile>
    <ClCompile Include="..\common_nopch\ConfigUtil.cpp">
      <Filter>源文件\common</Filter>
    </ClCompile>
    <ClCompile Include="..\common_nopch\md5.cpp">
      <Filter>源文件\common</Filter>
    </ClCompile>
    <ClCompile Include="..\common_nopch\NetworkApi.cpp">
      <Filter>源文件\common</Filter>
    </ClCompile>
    <ClCompile Include="..\common_nopch\SocketManager.cpp">
      <Filter>源文件\common</Filter>
    </ClCompile>
    <ClCompile Include="..\common_nopch\WidgetsRenderUtil.cpp">
      <Filter>源文件\common</Filter>
    </ClCompile>
    <ClCompile Include="..\common_nopch\Win32Util.cpp">
      <Filter>源文件\common</Filter>
    </ClCompile>
    <ClCompile Include="MyNetworkApi.cpp">
      <Filter>源文件</Filter>
    </ClCompile>
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="MainFrame.h">
      <Filter>头文件</Filter>
    </ClInclude>
    <ClInclude Include="ViewManager.h">
      <Filter>头文件</Filter>
    </ClInclude>
    <ClInclude Include="..\common_nopch\ConfigUtil.h">
      <Filter>头文件\common</Filter>
    </ClInclude>
    <ClInclude Include="..\common_nopch\JsonUtil.h">
      <Filter>头文件\common</Filter>
    </ClInclude>
    <ClInclude Include="..\common_nopch\md5.h">
      <Filter>头文件\common</Filter>
    </ClInclude>
    <ClInclude Include="..\common_nopch\NetworkApi.h">
      <Filter>头文件\common</Filter>
    </ClInclude>
    <ClInclude Include="..\common_nopch\SocketManager.h">
      <Filter>头文件\common</Filter>
    </ClInclude>
    <ClInclude Include="..\common_nopch\StringUtil.h">
      <Filter>头文件\common</Filter>
    </ClInclude>
    <ClInclude Include="..\common_nopch\TimeUtil.h">
      <Filter>头文件\common</Filter>
    </ClInclude>
    <ClInclude Include="..\common_nopch\WidgetsRenderUtil.h">
      <Filter>头文件\common</Filter>
    </ClInclude>
    <ClInclude Include="..\common_nopch\Win32Util.h">
      <Filter>头文件\common</Filter>
    </ClInclude>
    <ClInclude Include="MyNetworkApi.h">
      <Filter>头文件</Filter>
    </ClInclude>
  </ItemGroup>
  <ItemGroup>
    <None Include="packages.config" />
  </ItemGroup>
</Project>
CBTrade/CBTrade.vcxproj.user
New file
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <LocalDebuggerEnvironment>PATH=D:\workspace\GP\trade_desk_cplus\TradeDesk\gmsdk\lib\win64
$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment>
    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
  </PropertyGroup>
</Project>
CBTrade/MainFrame.cpp
New file
@@ -0,0 +1,27 @@
#include "MainFrame.h"
#include <wx/frame.h>
#include <wx/panel.h>
#include <wx/sizer.h>
#include <string.h>
BEGIN_EVENT_TABLE(MainFrame, wxFrame)
EVT_MENU(wxID_ABOUT, MainFrame::OnAbout)
EVT_MENU(wxID_EXIT, MainFrame::OnQuit)
END_EVENT_TABLE()
 MainFrame::MainFrame(const wxString& title):wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(MAIN_WINDOW_WIDTH, MAIN_WINDOW_HEIGHT)) {
    viewManager = new ViewManager();
    viewManager->initView(this);
}
void MainFrame::OnQuit(wxCommandEvent& event) {
}
void MainFrame::OnAbout(wxCommandEvent& event) {
}
CBTrade/MainFrame.h
New file
@@ -0,0 +1,27 @@
#pragma once
#include <wx/wx.h>
#include <wx/listctrl.h>
#include <wx/dataview.h>
#include <list>
#include "ViewManager.h"
class MainFrame:public wxFrame
{
private:
    ViewManager* viewManager;
public:
    // Constructor
    MainFrame(const wxString& title);
    // Event handlers
    void OnQuit(wxCommandEvent& event);
    void OnAbout(wxCommandEvent& event);
private:
    // This class handles events
    DECLARE_EVENT_TABLE()
};
CBTrade/MyNetworkApi.cpp
New file
@@ -0,0 +1,83 @@
#include "MyNetworkApi.h"
string MyNetworkApi::get_all_positions(string code)
{
    rapidjson::StringBuffer buf;
    rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(buf);
    writer.StartObject();
    writer.Key("type");
    writer.String("get_code_position_info");
    writer.Key("data");
    writer.StartObject();
    writer.Key("code");
    writer.String(code.c_str());
    writer.EndObject();
    writer.EndObject();
    const char* json_content = buf.GetString();
    string result = base_trade_request(std::string(json_content));
    return result;
}
string MyNetworkApi::get_money()
{
    rapidjson::StringBuffer buf;
    rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(buf);
    writer.StartObject();
    writer.Key("type");
    writer.String("get_account_money");
    writer.Key("data");
    writer.StartObject();
    writer.EndObject();
    writer.EndObject();
    const char* json_content = buf.GetString();
    string result = base_trade_request(std::string(json_content));
    return result;
}
string MyNetworkApi::buy(string code, int price_type, int volume,string price)
{
    rapidjson::StringBuffer buf;
    rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(buf);
    writer.StartObject();
    writer.Key("type");
    writer.String("buy");
    writer.Key("data");
    writer.StartObject();
    writer.Key("code");
    writer.String(code.c_str());
    writer.Key("price_type");
    writer.Int(price_type);
    writer.Key("volume");
    writer.Int(volume);
    writer.Key("price");
    writer.String(price.c_str());
    writer.EndObject();
    writer.EndObject();
    const char* json_content = buf.GetString();
    string result = base_trade_request(std::string(json_content));
    return result;
}
string MyNetworkApi::sell(string code, int price_type, int volume, string price)
{
    rapidjson::StringBuffer buf;
    rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(buf);
    writer.StartObject();
    writer.Key("type");
    writer.String("sell");
    writer.Key("data");
    writer.StartObject();
    writer.Key("code");
    writer.String(code.c_str());
    writer.Key("price_type");
    writer.Int(price_type);
    writer.Key("volume");
    writer.Int(volume);
    writer.Key("price");
    writer.String(price.c_str());
    writer.EndObject();
    writer.EndObject();
    const char* json_content = buf.GetString();
    string result = base_trade_request(std::string(json_content));
    return result;
}
CBTrade/MyNetworkApi.h
New file
@@ -0,0 +1,40 @@
#pragma once
#include "../common_nopch/NetworkApi.h"
class MyNetworkApi:public NetworkApi
{
public:
    /// <summary>
    /// 持仓获取
    /// </summary>
    /// <param name="code">代码</param>
    /// <returns></returns>
    static string get_all_positions(string code="");
    /// <summary>
    /// 获取账户资金
    /// </summary>
    /// <returns></returns>
    static string get_money();
    /// <summary>
    /// 买入
    /// </summary>
    /// <param name="code">代码</param>
    /// <param name="price_type">价格类型</param>
    /// <param name="volume">买入量</param>
    /// <returns></returns>
    static string buy(string code, int price_type, int volume, string price = "");
    /// <summary>
    /// 卖出
    /// </summary>
    /// <param name="code"></param>
    /// <param name="price_type"></param>
    /// <param name="volume"></param>
    /// <returns></returns>
    static string sell(string code, int price_type, int volume, string price="");
};
CBTrade/ViewManager.cpp
New file
@@ -0,0 +1,428 @@
#include "ViewManager.h"
#include <wx/charts/wxcharts.h>
#include <gmapi.h>
#include <set>
ViewManager::ViewManager() {
    this->topWidgets = new TopWidgets();
    this->tickWidgets = new TickWidgets();
    this->moneyWidgets = new MoneyWidgets();
    this->positionWidgets = new PositionWidgets();
    this->sellWidgets = new SellWidgets();
    set_token("123123");
}
wxPanel* ViewManager::createSplitLine(wxWindow* parent)
{
    wxPanel* splitterLine = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(-1, 1));
    splitterLine->SetBackgroundColour(wxColour(225, 225, 225));
    return splitterLine;
}
void ViewManager::initView(wxWindow* window) {
    window->SetBackgroundColour(wxColor(255, 255, 255));
    wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);
    wxPanel* topPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(MAIN_WINDOW_WIDTH, PANNEL_TOP_HEIGHT));
    wxPanel* tickPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(MAIN_WINDOW_WIDTH, PANNEL_TICK_HEIGHT));
    wxPanel* moneyPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(MAIN_WINDOW_WIDTH, PANNEL_MONEY_HEIGHT));
    wxPanel* positionPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(MAIN_WINDOW_WIDTH, PANNEL_POSITION_HEIGHT));
    wxPanel* sellPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(MAIN_WINDOW_WIDTH, PANNEL_SELL_HEIGHT));
    sizer->Add(topPanel, 0, wxLEFT | wxRIGHT, 2);
    sizer->Add(createSplitLine(window), 0, wxEXPAND);
    sizer->Add(tickPanel, 0, wxLEFT | wxRIGHT, 2);
    sizer->Add(createSplitLine(window), 0, wxEXPAND);
    sizer->Add(moneyPanel, 0, wxLEFT | wxRIGHT, 2);
    sizer->Add(createSplitLine(window), 0, wxEXPAND);
    sizer->Add(positionPanel, 0, wxLEFT | wxRIGHT, 2);
    sizer->Add(createSplitLine(window), 0, wxEXPAND);
    sizer->Add(sellPanel, 0, wxLEFT | wxRIGHT, 2);
    window->SetSizer(sizer);
    this->initTopView(topPanel);
    this->initTickView(tickPanel);
    this->initMoneyView(moneyPanel);
    this->initPositionView(positionPanel);
    this->initSellView(sellPanel);
}
void ViewManager::initTopView(wxPanel* pancel)
{
    wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);
    this->topWidgets->refreshBtn = new wxButton(pancel, wxID_ANY, "刷新", wxDefaultPosition, wxSize(50, -1));
    this->topWidgets->msgLabel = new wxStaticText(pancel, wxID_ANY, "提示语提示语", wxDefaultPosition);
    this->topWidgets->codeEdit = new wxTextCtrl(pancel, wxID_ANY, "000333", wxDefaultPosition, wxSize(60, 25));
    sizer->Add(this->topWidgets->codeEdit, 0, wxALL, 2);
    sizer->Add(this->topWidgets->msgLabel, 1, wxALIGN_CENTER_VERTICAL);
    sizer->Add(this->topWidgets->refreshBtn, 0, wxALL, 2);
    pancel->SetSizer(sizer);
}
class wxChartsPresentationDatasetTheme10 : public wxChartsDatasetTheme
{
public:
    wxChartsPresentationDatasetTheme10() {
        SetLineChartDatasetOptions(wxLineChartDatasetOptions(
            wxColor(220, 0, 0),
            wxColor(255, 255, 255),
            // wxColor(220, 220, 220, 0x33)
            wxColor(220, 0, 0, 0)
        ));
    }
};
void ViewManager::initTickView(wxPanel* panel)
{
    if (1 > 0) {
        return;
    }
    // 设置主题
    wxChartsDefaultTheme->SetDatasetTheme(wxChartsDatasetId::CreateImplicitId(0), wxSharedPtr<wxChartsDatasetTheme>(new wxChartsPresentationDatasetTheme10()));
    wxVector<wxString> labels;
    labels.push_back("January");
    labels.push_back("February");
    labels.push_back("March");
    labels.push_back("April");
    labels.push_back("May");
    labels.push_back("June");
    labels.push_back("July");
    wxChartsCategoricalData::ptr chartData = wxChartsCategoricalData::make_shared(labels);
    // Add the first dataset
    wxVector<wxDouble> points1;
    points1.push_back(3);
    points1.push_back(-2.5);
    points1.push_back(-1.2);
    points1.push_back(3);
    points1.push_back(6);
    points1.push_back(5);
    points1.push_back(1);
    wxChartsDoubleDataset::ptr dataset1(new wxChartsDoubleDataset("id0", points1));
    chartData->AddDataset(dataset1);
    // Create the line chart widget from the constructed data
    const wxLineChartOptions *options = new wxLineChartOptions();
    wxLineChartCtrl* lineChartCtrl = new wxLineChartCtrl(panel, wxID_ANY, chartData,
        wxCHARTSLINETYPE_STRAIGHT, *options, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE);
    lineChartCtrl->SetBackgroundColour(*wxBLACK);
    wxBoxSizer* panelSizer = new wxBoxSizer(wxHORIZONTAL);
    panelSizer->Add(lineChartCtrl, 1, wxEXPAND);
    //panelSizer->Add(legendCtrl, 1, wxEXPAND);
    panel->SetSizer(panelSizer);
}
void ViewManager::initMoneyView(wxPanel* panel)
{
    //wxStaticText* positionLabel;//持仓金额
    wxStaticText* frozenLabel; //冻结金额
    wxStaticText* totalLabel; // 账户总金额
    wxStaticText* todayCommissionLabel;// 今日手续费
    wxStaticText* todayProfitLabel;// 盈利金额
    wxStaticText* todayProfitRateLabel;// 今日盈利比
    wxStaticText* totalProfitLabel;// 累计盈利
    //
    wxGridSizer* rootSizer = new wxGridSizer(2, 4, 10, 20);
    wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);
    sizer->Add(new wxStaticText(panel, wxID_ANY, "可用资金:"));
    moneyWidgets->availableLabel = new wxStaticText(panel, wxID_ANY, "--");
    sizer->Add(moneyWidgets->availableLabel);
    rootSizer->Add(sizer, 0, wxEXPAND);
    sizer = new wxBoxSizer(wxHORIZONTAL);
    sizer->Add(new wxStaticText(panel, wxID_ANY, "持仓资金:"));
    moneyWidgets->positionLabel = new wxStaticText(panel, wxID_ANY, "--");
    sizer->Add(moneyWidgets->positionLabel);
    rootSizer->Add(sizer, 0, wxEXPAND);
    sizer = new wxBoxSizer(wxHORIZONTAL);
    sizer->Add(new wxStaticText(panel, wxID_ANY, "冻结资金:"));
    moneyWidgets->frozenLabel = new wxStaticText(panel, wxID_ANY, "--");
    sizer->Add(moneyWidgets->frozenLabel);
    rootSizer->Add(sizer, 0, wxEXPAND);
    sizer = new wxBoxSizer(wxHORIZONTAL);
    sizer->Add(new wxStaticText(panel, wxID_ANY, "账户总金额:"));
    moneyWidgets->totalLabel = new wxStaticText(panel, wxID_ANY, "--");
    sizer->Add(moneyWidgets->totalLabel);
    rootSizer->Add(sizer, 0, wxEXPAND);
    sizer = new wxBoxSizer(wxHORIZONTAL);
    sizer->Add(new wxStaticText(panel, wxID_ANY, "今日手续费:"));
    moneyWidgets->todayCommissionLabel = new wxStaticText(panel, wxID_ANY, "--");
    sizer->Add(moneyWidgets->todayCommissionLabel);
    rootSizer->Add(sizer, 0, wxEXPAND);
    sizer = new wxBoxSizer(wxHORIZONTAL);
    sizer->Add(new wxStaticText(panel, wxID_ANY, "今日盈亏:"));
    moneyWidgets->todayProfitLabel = new wxStaticText(panel, wxID_ANY, "--");
    sizer->Add(moneyWidgets->todayProfitLabel);
    rootSizer->Add(sizer, 0, wxEXPAND);
    sizer = new wxBoxSizer(wxHORIZONTAL);
    sizer->Add(new wxStaticText(panel, wxID_ANY, "今日盈亏比:"));
    moneyWidgets->todayProfitRateLabel = new wxStaticText(panel, wxID_ANY, "--");
    sizer->Add(moneyWidgets->todayProfitRateLabel);
    rootSizer->Add(sizer, 0, wxEXPAND);
    sizer = new wxBoxSizer(wxHORIZONTAL);
    sizer->Add(new wxStaticText(panel, wxID_ANY, "累计盈亏:"));
    moneyWidgets->totalProfitLabel = new wxStaticText(panel, wxID_ANY, "--");
    sizer->Add(moneyWidgets->totalProfitLabel);
    rootSizer->Add(sizer, 0, wxEXPAND);
    panel->SetSizer(rootSizer);
}
class ButtonRenderer : public wxDataViewCustomRenderer
{
public:
    ButtonRenderer(const wxString& varianttype = "string")
        : wxDataViewCustomRenderer(varianttype, wxDATAVIEW_CELL_ACTIVATABLE)
    {
    }
    virtual bool Render(wxRect cell, wxDC* dc, int state)
    {
        // 设置绘制按钮的位置和大小
        wxRect buttonRect(cell.GetPosition(), wxSize(40, 20));
        dc->SetTextForeground(wxColour(64, 64, 64));
        // 绘制按钮的外框
        dc->SetPen(wxColour(225, 225, 225));
        dc->SetBrush(wxColour(225, 225, 225));
        dc->DrawRectangle(buttonRect);
        // 绘制按钮的文本
        dc->DrawLabel("查看", buttonRect, wxALIGN_CENTER);
        return false;
    }
    // 点击事件处理方法
    bool ActivateCell(const wxRect& WXUNUSED(cell), wxDataViewModel* WXUNUSED(model), const wxDataViewItem& WXUNUSED(item), unsigned int WXUNUSED(col), const wxMouseEvent* mouseEvent) override {
        // 处理点击事件
        if (mouseEvent->LeftDown()) {
            wxMessageBox("单元格被点击");
        }
        return false; // 返回 true 表示已经处理了点击事件
    }
    virtual wxSize GetSize() const
    {
        // 返回按钮的大小
        return wxSize(40, 20);
    }
    virtual bool SetValue(const wxVariant& value) {
        return true;
    }
    virtual bool GetValue(wxVariant& value) const {
        return true;
    }
};
void ViewManager::initPositionView(wxPanel* panel)
{
    wxDataViewListCtrl* listCtrl = new wxDataViewListCtrl(
        panel, wxID_ANY, wxDefaultPosition, wxSize(-1, -1),
        wxLC_REPORT | wxBORDER_NONE);
    listCtrl->Bind(wxEVT_DATAVIEW_SELECTION_CHANGED, &ViewManager::OnPositionSelectionChanged, this);
    const int COL_COUNT = 10;
    std::string headers[COL_COUNT] = { "名称","涨幅","现价","L1现手","剩余持仓","持仓金额","盈亏","盈亏比","正股名称","更多" };
    int colWidths[COL_COUNT] = { 70,50 ,60 ,50 ,70 ,100 ,90 ,50 ,80 ,50 };
    for (int i = 0; i < COL_COUNT; i++) {
        if (i < COL_COUNT - 1) {
            listCtrl->AppendTextColumn(headers[i], wxDATAVIEW_CELL_INERT, colWidths[i]);
        }
        else {
            auto bc = new ButtonRenderer();
            listCtrl->AppendColumn(new wxDataViewColumn(headers[i], bc, 9, colWidths[i], wxALIGN_LEFT, wxDATAVIEW_COL_RESIZABLE));
        }
    }
    for (int i = 0; i < 5; i++) {
        wxVector<wxVariant> data;
        data.push_back(wxVariant("美的转债"));
        data.push_back(wxVariant("10.2%"));
        data.push_back(wxVariant("123.123"));
        data.push_back(wxVariant("452"));
        data.push_back(wxVariant("30"));
        data.push_back(wxVariant("2000.00Ԫ"));
        data.push_back(wxVariant("+20000.10Ԫ"));
        data.push_back(wxVariant("1.01%"));
        data.push_back(wxVariant("美的集团"));
        data.push_back("");
        listCtrl->AppendItem(data);
    }
    listCtrl->Refresh();
    positionWidgets->listCtrlReport = listCtrl;
    wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);
    sizer->Add(positionWidgets->listCtrlReport, 1, wxEXPAND);
    panel->SetSizer(sizer);
}
void ViewManager::initSellView(wxPanel* panel)
{
    const int moneys[] = { 50000,40000,30000,20000,10000,5000,3000,2000,1000 };
    //-------按钮操作区域
    const int COLUMN_SPACE = 8;
    auto btnSizer = new wxBoxSizer(wxHORIZONTAL);
    wxPanel* btnPannel = new wxPanel(panel, wxID_ANY, wxDefaultPosition, wxSize(-1, 55));
    btnPannel->SetSizer(btnSizer);
    sellWidgets->buyLock = new wxCheckBox(btnPannel, wxID_ANY, "买锁定");
    sellWidgets->buyMoney = new wxTextCtrl(btnPannel, wxID_ANY, "", wxDefaultPosition, wxSize(60, -1));
    sellWidgets->sellLock = new wxCheckBox(btnPannel, wxID_ANY, "卖锁定");
    sellWidgets->sellMoney = new wxTextCtrl(btnPannel, wxID_ANY, "", wxDefaultPosition, wxSize(60, -1));
    auto bv = new wxBoxSizer(wxVERTICAL);
    bv->Add(sellWidgets->buyLock, 0, wxTOP, 5);
    bv->AddStretchSpacer();
    bv->Add(sellWidgets->buyMoney, 0);
    btnSizer->Add(bv, 0, wxEXPAND | wxLEFT, 5);
    bv = new wxBoxSizer(wxVERTICAL);
    bv->Add(sellWidgets->sellLock, 0, wxTOP, 5);
    bv->AddStretchSpacer();
    bv->Add(sellWidgets->sellMoney, 0);
    btnSizer->Add(bv, 0, wxEXPAND | wxLEFT, COLUMN_SPACE);
    // 开启/关闭交易
    sellWidgets->openTrade = new wxButton(btnPannel, wxID_ANY, "开启交易", wxDefaultPosition, wxSize(60, -1));
    sellWidgets->closeTrade = new wxButton(btnPannel, wxID_ANY, "关闭交易", wxDefaultPosition, wxSize(60, -1));
    bv = new wxBoxSizer(wxVERTICAL);
    bv->Add(sellWidgets->openTrade, 0);
    bv->AddStretchSpacer();
    bv->Add(sellWidgets->closeTrade, 0);
    btnSizer->Add(bv, 0, wxEXPAND | wxLEFT, COLUMN_SPACE);
    // 想买单
    sellWidgets->addWantBuy = new wxButton(btnPannel, wxID_ANY, "加想", wxDefaultPosition, wxSize(40, -1));
    sellWidgets->removeWantBuy = new wxButton(btnPannel, wxID_ANY, "移想", wxDefaultPosition, wxSize(40, -1));
    sellWidgets->wantBuyList = new wxButton(btnPannel, wxID_ANY, "想单", wxDefaultPosition, wxSize(40, -1));
    bv = new wxBoxSizer(wxVERTICAL);
    bv->Add(sellWidgets->addWantBuy, 0);
    bv->AddStretchSpacer();
    bv->Add(sellWidgets->removeWantBuy, 0);
    btnSizer->Add(bv, 0, wxEXPAND | wxLEFT, COLUMN_SPACE);
    btnSizer->Add(sellWidgets->wantBuyList, 0, wxEXPAND | wxLEFT, 3);
    // 卖出按钮
    sellWidgets->sellBtn = new wxButton(btnPannel, wxID_ANY, "卖出", wxDefaultPosition, wxSize(80, -1));
    wxFont font(15, sellWidgets->sellBtn->GetFont().GetFamily(), wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD);
    sellWidgets->sellBtn->SetFont(font);
    btnSizer->Add(sellWidgets->sellBtn, 0, wxEXPAND | wxLEFT, 10);
    // 自动撤单/参数设置
    sellWidgets->autoCancel = new wxCheckBox(btnPannel, wxID_ANY, "自动撤单");
    sellWidgets->setting = new wxButton(btnPannel, wxID_ANY, "参数设置", wxDefaultPosition, wxSize(70, -1));
    bv = new wxBoxSizer(wxVERTICAL);
    bv->Add(sellWidgets->autoCancel, 0);
    bv->AddStretchSpacer();
    bv->Add(sellWidgets->setting, 0);
    btnSizer->Add(bv, 0, wxEXPAND | wxLEFT, COLUMN_SPACE);
    // 买价/卖价设置
    const wxString prices_buy[] = { "笼子价", "跌停价","涨停价","现价","买5价" };
    const wxString prices_sell[] = { "笼子价", "跌停价","涨停价","现价","卖5价" };
    sellWidgets->sellPrice = new wxChoice(btnPannel, wxID_ANY, wxDefaultPosition, wxSize(70, -1));
    sellWidgets->buyPrice = new wxChoice(btnPannel, wxID_ANY, wxDefaultPosition, wxSize(70, -1));
    for (int i = 0; i < 5; i++) {
        sellWidgets->sellPrice->Append(prices_sell[i]);
        sellWidgets->buyPrice->Append(prices_buy[i]);
    }
    sellWidgets->sellPrice->SetSelection(1);
    sellWidgets->buyPrice->SetSelection(2);
    bv = new wxBoxSizer(wxVERTICAL);
    bv->Add(new wxStaticText(btnPannel, wxID_ANY, "卖价设置"), 0);
    bv->AddStretchSpacer();
    bv->Add(sellWidgets->sellPrice, 0);
    btnSizer->Add(bv, 0, wxEXPAND | wxLEFT, 10);
    bv = new wxBoxSizer(wxVERTICAL);
    bv->Add(new wxStaticText(btnPannel, wxID_ANY, "买价设置"), 0);
    bv->AddStretchSpacer();
    bv->Add(sellWidgets->buyPrice, 0);
    btnSizer->Add(bv, 0, wxEXPAND | wxLEFT, COLUMN_SPACE);
    // 买入
    btnSizer->AddStretchSpacer();
    sellWidgets->buyBtn = new wxButton(btnPannel, wxID_ANY, "买入", wxDefaultPosition, wxSize(50, -1));
    sellWidgets->buyBtn->SetFont(font);
    btnSizer->Add(sellWidgets->buyBtn, 0, wxEXPAND | wxLEFT, COLUMN_SPACE);
    //------- 卖金额区域
    const int sellNumCount = sizeof(moneys) / sizeof(moneys[0]);
    for (int i = 0; i < sellNumCount; i++) {
        sellWidgets->sellNums.push_back(new wxButton(panel, wxID_ANY, std::to_string(moneys[i]), wxDefaultPosition, wxSize(-1, 30)));
    }
    auto sellNumsSizer = new wxBoxSizer(wxHORIZONTAL);
    for (std::list<wxButton*>::iterator e = sellWidgets->sellNums.begin(); e != sellWidgets->sellNums.end(); e++) {
        sellNumsSizer->Add(*e, 1, wxEXPAND | wxLEFT | wxRIGHT, 2);
    }
    auto rootSizer = new wxBoxSizer(wxVERTICAL);
    rootSizer->Add(btnPannel, 0, wxEXPAND | wxTOP, 5);
    rootSizer->Add(sellNumsSizer, 1, wxEXPAND | wxTOP, 5);
    panel->SetSizer(rootSizer);
}
void ViewManager::OnPositionSelectionChanged(wxDataViewEvent& event)
{
    event.Skip();
    //event.Veto();
}
CBTrade/ViewManager.h
New file
@@ -0,0 +1,98 @@
#pragma once
#include <wx/wx.h>
#include <wx/listctrl.h>
#include <wx/dataview.h>
#include <list>
#define MAIN_WINDOW_WIDTH 720
#define PANNEL_TOP_HEIGHT 30
#define PANNEL_TICK_HEIGHT 360
#define PANNEL_MONEY_HEIGHT 60
#define PANNEL_POSITION_HEIGHT 310
#define PANNEL_SELL_HEIGHT 90
#define MAIN_WINDOW_HEIGHT (PANNEL_TOP_HEIGHT + PANNEL_TICK_HEIGHT + PANNEL_MONEY_HEIGHT + PANNEL_POSITION_HEIGHT + PANNEL_SELL_HEIGHT + 38 + 5*2)
struct TopWidgets
{
    wxButton* refreshBtn;
    wxTextCtrl* codeEdit;
    wxStaticText* msgLabel;
};
struct TickWidgets
{
};
struct MoneyWidgets
{
    wxStaticText* availableLabel;//可用资金
    wxStaticText* positionLabel;//持仓金额
    wxStaticText* frozenLabel; //冻结金额
    wxStaticText* totalLabel; // 账户总金额
    wxStaticText* todayCommissionLabel;// 今日手续费
    wxStaticText* todayProfitLabel;// 盈利金额
    wxStaticText* todayProfitRateLabel;// 今日盈利比
    wxStaticText* totalProfitLabel;// 累计盈利
};
struct PositionWidgets
{
    wxDataViewListCtrl* listCtrlReport;
};
struct SellWidgets
{
    wxCheckBox* buyLock;
    wxTextCtrl* buyMoney;
    wxCheckBox* sellLock;
    wxTextCtrl* sellMoney;
    wxButton* openTrade;
    wxButton* closeTrade;
    // 想买单
    wxButton* addWantBuy;
    wxButton* removeWantBuy;
    wxButton* wantBuyList;
    wxButton* setting;
    wxCheckBox* autoCancel;
    wxChoice* buyPrice;
    wxChoice* sellPrice;
    wxButton* sellBtn;
    wxButton* buyBtn;
    std::list<wxButton*> sellNums;
};
class ViewManager
{
private:
        TopWidgets* topWidgets;
        TickWidgets* tickWidgets;
        MoneyWidgets* moneyWidgets;
        PositionWidgets* positionWidgets;
        SellWidgets* sellWidgets;
public:
    ViewManager();
    static wxPanel* createSplitLine(wxWindow* parent);
    void initView(wxWindow* window);
private:
    void initTopView(wxPanel* pancel);
    void initTickView(wxPanel* panel);
    void initMoneyView(wxPanel* panel);
    void initPositionView(wxPanel* panel);
    void initSellView(wxPanel* panel);
    void OnPositionSelectionChanged(wxDataViewEvent& event);
};
CBTrade/main.cpp
New file
@@ -0,0 +1,30 @@
#include<iostream>
#include <wx/wx.h>
#include "MyNetworkApi.h"
#include "MainFrame.h"
class App :public wxApp {
public:
    /// <summary>
    /// 初始化函数
    /// </summary>
    void InitData() {
        MyNetworkApi::set_server_info("43.138.167.68", 13008,"43.138.167.68", 13008);
        //MyNetworkApi::set_server_info("192.168.3.122", 13008, "192.168.3.122", 13008);
        MyNetworkApi::get_all_positions();
    }
    bool OnInit() {
        InitData();
        MainFrame* window = new MainFrame("可转债交易");
        window->Show();
        return true;
    }
};
wxIMPLEMENT_APP(App);
CBTrade/packages.config
New file
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="tencent.rapidjson" version="1.1.1" targetFramework="native" />
</packages>