From 8ea6d363df77de2dca288397da8d4f9c3d3a5c4d Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期五, 18 十月 2024 18:41:57 +0800 Subject: [PATCH] '项目完善' --- DelegateQueue/MainFrame.cpp | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 109 insertions(+), 6 deletions(-) diff --git a/DelegateQueue/MainFrame.cpp b/DelegateQueue/MainFrame.cpp index c58d98f..4509e89 100644 --- a/DelegateQueue/MainFrame.cpp +++ b/DelegateQueue/MainFrame.cpp @@ -8,6 +8,7 @@ #include "../common_nopch/TimeUtil.h" #include "MyConfigUtil.h" #include <wx/graphics.h> +#include <atlstr.h> #define ROW_WIDTH_DELEGATE_INFO (FRAME_WIDTH - 30)*DPI/100 @@ -29,6 +30,7 @@ CLICK_TYPE_CANCEL_BUY, CLICK_TYPE_VIEW_DETAIL, CLICK_TYPE_QUEUE, + CLICK_TYPE_NOT_BUY, }; struct ViewDetailData { @@ -44,6 +46,7 @@ DelegateInfo delegateInfo; wxString delegateInfoStr; list<ColorIndexInfo> delegateColors; + map<wxString, wxRect> notBuyBtnRectMap; map<wxString, wxRect> viewBtnRectMap; map<wxString, wxRect> cancelBtnRectMap; map<wxString, wxRect> queueRectMap; @@ -170,6 +173,10 @@ codeInfo.Append(" ").Append(delegateInfo.zyltgb); + if (delegateInfo.mode == 3) { + codeInfo.Append("(扫入)"); + } + if (delegateInfo.pay_attention) { WidgetsRenderUtil::drawText(dc, codeInfo, wxPoint(startx, starty + 3), line_width, TEXT_LINE_HEIGHT, std::list<ColorIndexInfo>(), *wxRED); @@ -179,6 +186,9 @@ else { WidgetsRenderUtil::drawText(dc, codeInfo, wxPoint(startx, starty + 3), line_width, TEXT_LINE_HEIGHT); } + + + // 绘制按钮 dc->SetPen(wxColour(225, 225, 225)); dc->SetBrush(wxColour(225, 225, 225)); @@ -194,6 +204,14 @@ cancelBtnRectMap[delegateInfo.id] = wxRect({ startx + line_width - viewBtnRectMap[delegateInfo.id].GetWidth() - btnWidth - padding - (delegateInfo.index % 2 == 0 ? 0 : btnWidth + 5 * DPI / 100), starty, btnWidth, btnHeight }); cout << "撤单位置渲染:" << delegateInfo.index << " - " << cancelBtnRectMap[delegateInfo.id].x << ":" << cancelBtnRectMap[delegateInfo.id].y << endl; WidgetsRenderUtil::drawBtn(dc, "撤单", cancelBtnRectMap[delegateInfo.id], *wxWHITE, wxColour(255, 87, 34)); + + notBuyBtnRectMap[delegateInfo.id] = wxRect({ cancelBtnRectMap[delegateInfo.id].GetLeft() -btnWidth - padding, cancelBtnRectMap[delegateInfo.id].GetTop(), btnWidth, btnHeight}); + + + WidgetsRenderUtil::drawBtn(dc, "不买", notBuyBtnRectMap[delegateInfo.id], *wxWHITE, wxColour(133, 202, 255)); + + + } void drawDelegateQueue(wxDC* dc, wxPoint start, int line_width) { @@ -266,6 +284,7 @@ wxRect gridPostion = gridPostionMap[delegateInfo.id]; wxRect queueRect = queueRectMap[delegateInfo.id]; wxRect cancelBtnRect = cancelBtnRectMap[delegateInfo.id]; + wxRect notBuyBtnRect = notBuyBtnRectMap[delegateInfo.id]; wxRect viewBtnRect = viewBtnRectMap[delegateInfo.id]; cout << "单元位置:" << gridPostion.x << "-" << gridPostion.y << endl; @@ -285,6 +304,10 @@ else if (x >= cancelBtnRect.x && x <= cancelBtnRect.x + cancelBtnRect.GetWidth() && y > cancelBtnRect.y && y <= cancelBtnRect.y + cancelBtnRect.GetHeight()) { return CLICK_TYPE_CANCEL_BUY; + } + else if (x >= notBuyBtnRect.x && x <= notBuyBtnRect.x + notBuyBtnRect.GetWidth() && y > notBuyBtnRect.y && y <= notBuyBtnRect.y + notBuyBtnRect.GetHeight()) { + + return CLICK_TYPE_NOT_BUY; } else if (x >= queueRect.x && x <= queueRect.x + queueRect.GetWidth() && y > queueRect.y && y <= queueRect.y + queueRect.GetHeight()) { @@ -358,6 +381,30 @@ } + // 加入黑名单 + void forbiddenBuy(string code) { + try { + string results = MyNetworkApi::add_black(code); + auto doc = JsonUtil::parseUTF16(results); + if (doc.IsObject()) { + + if (doc[L"code"].GetInt() == 0) { + showMsg(wxString(delegateInfo.codeName).Append(":加入黑名单成功").ToStdString(), MSG_TYPE_INFO); + } + else { + showMsg(wxString(doc[L"msg"].GetString()).ToStdString(), MSG_TYPE_WARNING); + } + } + else { + showMsg("网络请求失败", MSG_TYPE_ERROR); + } + } + catch (wstring st) { + showMsg(wxString( st.c_str()).ToStdString(), MSG_TYPE_ERROR); + } + + } + MainFrame* getWindowFrame() { wxWindow* window = this->GetOwner()->GetOwner()->GetParent(); @@ -413,6 +460,10 @@ case CLICK_TYPE_CANCEL_BUY: cancelOrder(delegateInfo.code.ToStdString()); + break; + case CLICK_TYPE_NOT_BUY: + cancelOrder(delegateInfo.code.ToStdString()); + forbiddenBuy(delegateInfo.code.ToStdString()); break; case CLICK_TYPE_VIEW_DETAIL: try { @@ -522,13 +573,51 @@ wxButton* openTradeQueueBtn = new wxButton(panel, wxID_ANY, "查看全部"); - avaiableMoneyLabel = new wxStaticText(panel, wxID_ANY, "0.00", wxDefaultPosition, wxSize(80 * DPI / 100, -1)); + avaiableMoneyLabel = new wxStaticText(panel, wxID_ANY, "0.00", wxDefaultPosition, wxSize(-1, -1)); wxBoxSizer* topSizer = new wxBoxSizer(wxHORIZONTAL); - topSizer->Add(msgCtrl, 1, wxEXPAND); - topSizer->Add(avaiableMoneyLabel, 0, wxEXPAND | wxALL, 3); - topSizer->Add(openTradeQueueBtn, 0); + + currentTime = new wxStaticText(panel, wxID_ANY, "00:00:00", wxDefaultPosition, wxSize(-1, -1)); + wxButton* repaireBtn = new wxButton(panel, wxID_ANY, "刷新"); + + wxBoxSizer* sizer1 = new wxBoxSizer(wxVERTICAL); + sizer1->Add(currentTime, 0, wxALL, 1); + sizer1->Add(repaireBtn, 0); + topSizer->Add(sizer1, 0, wxRIGHT, 2); + + sizer1= new wxBoxSizer(wxVERTICAL); + sizer1->Add(avaiableMoneyLabel, 0, wxALL, 1); + sizer1->Add(openTradeQueueBtn, 0); + + topSizer->Add(sizer1); + + wxButton* openTradeQueue = new wxButton(panel, wxID_ANY, "打开队列"); + openTradeQueue->Bind(wxEVT_BUTTON, [this](wxCommandEvent& event) { + wxTextEntryDialog dialog(this, "股票代码", "请输入股票代码", ""); + + if (dialog.ShowModal() == wxID_OK) { + wxString input = dialog.GetValue(); + if (input.Length() != 6) { + wxMessageBox("代码输入错误"); + return; + } + WindowPosSize r = MyConfigUtil::getTradeQueueWindowPos(); + if (r.x == -1 && r.y == -1) { + r.x = 0; + r.y = 0; + r.width = 400; + r.height = 400; + } + + TradeQueueFrame* tradeQueueFrame = new TradeQueueFrame(input.ToStdString(), input.ToStdString(), wxPoint(r.x, r.y), wxSize(r.width, r.height)); + tradeQueueFrame->Show(true); + } + + }); + + topSizer->Add(openTradeQueue, 0, wxALIGN_BOTTOM|wxLEFT, 2); + sizer->Add(topSizer, 0, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, 5); @@ -537,6 +626,16 @@ openTradeQueueBtn->Bind(wxEVT_BUTTON, &MainFrame::OnButtonOpenTradeQueueClick, this); + repaireBtn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& event) { + string nowTime = TimeUtil::format(TimeUtil::getNowTimeStamp(),"%H:%M:%S"); + wxString updateTime = currentTime->GetLabelText().ToStdString(); + // 将时间转为s + if (TimeUtil::timeStr2Seconds(nowTime) - TimeUtil::timeStr2Seconds(updateTime.ToStdString()) > 10||true) { + // 大于10s + std::thread t1(startRequestDelegatedInfoListTask, this); + t1.detach(); + } + }); std::thread t1(startRequestDelegatedInfoListTask, this); @@ -586,7 +685,7 @@ void MainFrame::refresh() { - cout << "刷新时间:" << TimeUtil::getNowTimeStamp() << " 数量:" << delegateList.size() << endl; + //cout << "刷新时间:" << TimeUtil::getNowTimeStamp() << " 数量:" << delegateList.size() << endl; m_listCtrl->DeleteAllItems(); for (list<DelegateInfo>::iterator e = delegateList.begin(); e != delegateList.end(); ++e) { DelegateInfo info = *e; @@ -654,6 +753,9 @@ if (doc.HasMember(L"zyltgb")) delegateInfo.zyltgb = doc[L"zyltgb"].GetString(); + if (doc.HasMember(L"mode")) + delegateInfo.mode = doc[L"mode"].GetInt(); + fresults.push_back(delegateInfo); } } @@ -706,10 +808,11 @@ start_time = TimeUtil::getNowTimeStamp(); // 根据ID if (this != nullptr) { + this->currentTime->SetLabelText(TimeUtil::format(TimeUtil::getNowTimeStamp(),"%H:%M:%S")); this->delegateList = delegateResult.delegates; this->avaiableMoneyLabel->SetLabelText(delegateResult.money); this->refresh(); - cout << "刷新UI耗时:" << TimeUtil::getNowTimeStamp() - start_time << endl; + //cout << "刷新UI耗时:" << TimeUtil::getNowTimeStamp() - start_time << endl; } } catch (string st) { -- Gitblit v1.8.0