LAPTOP-SNT8I5JK\Boounion
2025-09-18 df4d0e875ccfe40add25100a75dedee54e566aaa
1.CConrolJobManagerDlg临时数据存储。
已修改3个文件
53 ■■■■ 文件已修改
SourceCode/Bond/Servo/CControlJobManagerDlg.cpp 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CControlJobManagerDlg.h 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Servo.cpp 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CControlJobManagerDlg.cpp
@@ -8,6 +8,9 @@
#include "ToolUnits.h"
bool CControlJobManagerDlg::m_bHasState = false;
CControlJobManagerDlg::State CControlJobManagerDlg::m_state{};
// CControlJobManagerDlg 对话框
IMPLEMENT_DYNAMIC(CControlJobManagerDlg, CDialogEx)
@@ -20,15 +23,22 @@
CControlJobManagerDlg::~CControlJobManagerDlg()
{
    for (auto item : m_pjWarps) {
}
void CControlJobManagerDlg::FreeState()
{
    if (!m_bHasState) return;
    for (auto item : m_state.pjWarps) {
        delete (SERVO::CProcessJob*)item.pj;
    }
    m_pjWarps.clear();
    m_state.pjWarps.clear();
    if (m_pControlJob != nullptr) {
        delete m_pControlJob;
        m_pControlJob = nullptr;
    if (m_state.pControlJob != nullptr) {
        delete m_state.pControlJob;
        m_state.pControlJob = nullptr;
    }
    m_bHasState = false;
}
void CControlJobManagerDlg::DoDataExchange(CDataExchange* pDX)
@@ -240,6 +250,7 @@
void CControlJobManagerDlg::OnDestroy()
{
    CDialogEx::OnDestroy();
    SaveState();
    for (auto page : m_pages) {
        page->DestroyWindow();
@@ -249,7 +260,9 @@
void CControlJobManagerDlg::InitData()
{
    ASSERT(m_pControlJob == nullptr);
    LoadState();
    if (m_pControlJob != nullptr) return;
    m_pControlJob = new SERVO::CControlJob("CJ" + CToolUnits::NowStrSec());
    char szBuffer[256];
@@ -292,3 +305,19 @@
        hRoot = m_tree.GetNextSiblingItem(hRoot);
    }
}
void CControlJobManagerDlg::LoadState()
{
    if (!m_bHasState) return;
    // 把 s_state -> 成员变量
    m_pControlJob = m_state.pControlJob;
    m_pjWarps = m_state.pjWarps;
}
void CControlJobManagerDlg::SaveState()
{
    m_state.pControlJob = m_pControlJob;
    m_state.pjWarps = m_pjWarps;
    m_bHasState = true;
}
SourceCode/Bond/Servo/CControlJobManagerDlg.h
@@ -14,6 +14,7 @@
public:
    CControlJobManagerDlg(CWnd* pParent = nullptr);   // 标准构造函数
    virtual ~CControlJobManagerDlg();
    static void FreeState();
private:
    void Resize();
@@ -23,6 +24,8 @@
    bool RemovePorcessJob(SERVO::CProcessJob* pj);
    void UpProcessJobId(PJWarp* pjWarp);
    void InitData();
    void LoadState();
    void SaveState();
private:
    std::vector<CCjPageBase*> m_pages;
@@ -30,6 +33,13 @@
    std::vector<PJWarp> m_pjWarps;
    CApredTreeCtrl2 m_tree;
public:
    struct State {
        SERVO::CControlJob* pControlJob = nullptr;
        std::vector<PJWarp> pjWarps;
    };
    static bool m_bHasState;
    static State m_state;
// 对话框数据
#ifdef AFX_DESIGN_TIME
SourceCode/Bond/Servo/Servo.cpp
@@ -16,6 +16,7 @@
#include "EqsGraphWnd.h"
#include "MapPosWnd.h"
#include "HmTab.h"
#include "CControlJobManagerDlg.h"
// 声明全局变量,用于管理 GDI+ 初始化
@@ -226,6 +227,7 @@
int CServoApp::ExitInstance()
{
    CControlJobManagerDlg::FreeState();
    m_model.term();
    HSMS_Term();
    RX_Term();