LAPTOP-SNT8I5JK\Boounion
2025-07-21 66d8ca4b75006f9875731ef819dafd3d20ca01a2
1.信号页面,增加下游信号的显示;
已修改5个文件
103 ■■■■ 文件已修改
SourceCode/Bond/Servo/CPageGraph2.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CPageLinkSignal.cpp 92 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CPageLinkSignal.h 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Servo.rc 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/resource.h 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CPageGraph2.cpp
@@ -127,7 +127,7 @@
        ASSERT(pItem);
        SERVO::CEquipment* pEquipment = (SERVO::CEquipment*)pItem->pData;
        CHMPropertyDlg dlg(pEquipment->getName().c_str(), 658, 788);
        CHMPropertyDlg dlg(pEquipment->getName().c_str(), 1258, 788);
        CPageLinkSignal* pPage1 = new CPageLinkSignal();
        pPage1->setEquipment(pEquipment);
SourceCode/Bond/Servo/CPageLinkSignal.cpp
@@ -89,10 +89,20 @@
    // TODO: 在此处添加消息处理程序代码
    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            if (m_pBtn[i][j] != nullptr) {
                m_pBtn[i][j]->DestroyWindow();
                delete m_pBtn[i][j];
                m_pBtn[i][j] = nullptr;
            if (m_pBtnUpstream[i][j] != nullptr) {
                m_pBtnUpstream[i][j]->DestroyWindow();
                delete m_pBtnUpstream[i][j];
                m_pBtnUpstream[i][j] = nullptr;
            }
        }
    }
    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 4; j++) {
            if (m_pBtnDwonstream[i][j] != nullptr) {
                m_pBtnDwonstream[i][j]->DestroyWindow();
                delete m_pBtnDwonstream[i][j];
                m_pBtnDwonstream[i][j] = nullptr;
            }
        }
    }
@@ -119,11 +129,28 @@
        y = BTN_Y + (BTN_WIDTH + marginy) * row;
        for (int col = 0; col < 8; col++) {
            x = BTN_X + (BTN_WIDTH + marginx) * col;
            m_pBtn[row][col] = new CBlButton();
            m_pBtn[row][col]->Create("", WS_VISIBLE, { x, y, x + 36, y + 36 }, this, 1000);
            m_pBtn[row][col]->SetFaceColor(FACECOLOR_OFF);
            m_pBtn[row][col]->SetFrameColor(RGB(28, 28, 28));
            m_pBtn[row][col]->SetTextColor(RGB(238, 238, 238));
            m_pBtnUpstream[row][col] = new CBlButton();
            m_pBtnUpstream[row][col]->Create("", WS_VISIBLE, { x, y, x + 36, y + 36 }, this, 1000);
            m_pBtnUpstream[row][col]->SetFaceColor(FACECOLOR_OFF);
            m_pBtnUpstream[row][col]->SetFrameColor(RGB(28, 28, 28));
            m_pBtnUpstream[row][col]->SetTextColor(RGB(238, 238, 238));
        }
    }
    CRect rcLine;
    GetDlgItem(IDC_LINE1)->GetWindowRect(&rcLine);
    GetDlgItem(IDC_LINE1)->MoveWindow(BTN_Y, BTN_X + (BTN_WIDTH + marginx) * 8,
        rcLine.Width(), rcLine.Height());
    for (int row = 0; row < 8; row++) {
        y = BTN_Y + (BTN_WIDTH + marginy) * row;
        for (int col = 0; col < 4; col++) {
            x = BTN_X + (BTN_WIDTH + marginx) * (col + 8);
            m_pBtnDwonstream[row][col] = new CBlButton();
            m_pBtnDwonstream[row][col]->Create("", WS_VISIBLE, { x, y, x + 36, y + 36 }, this, 1000);
            m_pBtnDwonstream[row][col]->SetFaceColor(FACECOLOR_OFF);
            m_pBtnDwonstream[row][col]->SetFrameColor(RGB(28, 28, 28));
            m_pBtnDwonstream[row][col]->SetTextColor(RGB(238, 238, 238));
        }
    }
@@ -140,8 +167,9 @@
    }
    int idy[] = { IDC_LABEL_NAME1, IDC_LABEL_NAME2, IDC_LABEL_NAME3, IDC_LABEL_NAME4, IDC_LABEL_NAME5,
        IDC_LABEL_NAME6, IDC_LABEL_NAME7, IDC_LABEL_NAME8 };
    for (int i = 0; i < 8; i++) {
        IDC_LABEL_NAME6, IDC_LABEL_NAME7, IDC_LABEL_NAME8, IDC_LABEL_NAME9, IDC_LABEL_NAME10,
        IDC_LABEL_NAME11, IDC_LABEL_NAME12};
    for (int i = 0; i < sizeof(idy) / sizeof(int); i++) {
        pItem = GetDlgItem(idy[i]);
        pItem->GetWindowRect(&rcItem);
        pItem->MoveWindow(BTN_X + (BTN_WIDTH + marginx) * i,
@@ -162,35 +190,61 @@
{
    if (nIDEvent == TIMER_ID_SIGNAL_UPDATE) {
        if (m_pEquipment) {
            UpdateAllSignalStatesFromDevice();
            UpdateAllUpstreamSignalStatesFromDevice();
            UpdateAllDownstreamSignalStatesFromDevice();
        }
    }
    CHMPropertyPage::OnTimer(nIDEvent);
}
void CPageLinkSignal::UpdateAllSignalStatesFromDevice()
void CPageLinkSignal::UpdateAllUpstreamSignalStatesFromDevice()
{
    ASSERT(m_pEquipment);
    for (int nRow = 0; nRow < 8; ++nRow) {
        for (int nCol = 0; nCol < 8; ++nCol) {
            BOOL bCurrentState = m_pEquipment->isLinkSignalUpstreamOn(nRow, nCol) && m_pEquipment->IsEnabled();
            UpdateSignalState(nRow, nCol, bCurrentState);
            UpdateUpstreamSignalState(nRow, nCol, bCurrentState);
        }
    }
}
void CPageLinkSignal::UpdateSignalState(int nRow, int nCol, bool bNewState)
void CPageLinkSignal::UpdateAllDownstreamSignalStatesFromDevice()
{
    if (!::IsWindow(m_pBtn[nRow][nCol]->GetSafeHwnd())) {
    ASSERT(m_pEquipment);
    for (int nRow = 0; nRow < 8; ++nRow) {
        for (int nCol = 0; nCol < 4; ++nCol) {
            BOOL bCurrentState = m_pEquipment->isLinkSignalDownstreamOn(nRow, nCol) && m_pEquipment->IsEnabled();
            UpdateDownstreamSignalState(nRow, nCol, bCurrentState);
        }
    }
}
void CPageLinkSignal::UpdateUpstreamSignalState(int nRow, int nCol, bool bNewState)
{
    if (!::IsWindow(m_pBtnUpstream[nRow][nCol]->GetSafeHwnd())) {
        return;
    }
    bool bState = ::GetProp(m_pBtn[nRow][nCol]->GetSafeHwnd(), _T("State")) == (void*)1;
    bool bState = ::GetProp(m_pBtnUpstream[nRow][nCol]->GetSafeHwnd(), _T("State")) == (void*)1;
    if (bState != bNewState) {
        m_pBtn[nRow][nCol]->SetFaceColor(bNewState ? FACECOLOR_ON : FACECOLOR_OFF);
        ::SetProp(m_pBtn[nRow][nCol]->GetSafeHwnd(), _T("State"), bNewState ? (void*)1 : (void*)0);
        m_pBtnUpstream[nRow][nCol]->SetFaceColor(bNewState ? FACECOLOR_ON : FACECOLOR_OFF);
        ::SetProp(m_pBtnUpstream[nRow][nCol]->GetSafeHwnd(), _T("State"), bNewState ? (void*)1 : (void*)0);
    }
}
void CPageLinkSignal::UpdateDownstreamSignalState(int nRow, int nCol, bool bNewState)
{
    if (!::IsWindow(m_pBtnDwonstream[nRow][nCol]->GetSafeHwnd())) {
        return;
    }
    bool bState = ::GetProp(m_pBtnDwonstream[nRow][nCol]->GetSafeHwnd(), _T("State")) == (void*)1;
    if (bState != bNewState) {
        m_pBtnDwonstream[nRow][nCol]->SetFaceColor(bNewState ? FACECOLOR_ON : FACECOLOR_OFF);
        ::SetProp(m_pBtnDwonstream[nRow][nCol]->GetSafeHwnd(), _T("State"), bNewState ? (void*)1 : (void*)0);
    }
}
SourceCode/Bond/Servo/CPageLinkSignal.h
@@ -14,13 +14,16 @@
    virtual ~CPageLinkSignal();
    void setEquipment(SERVO::CEquipment* pEquipment);
    void CreateSignalButtons();
    void UpdateAllSignalStatesFromDevice();
    void UpdateSignalState(int nRow, int nCol, bool bNewState);
    void UpdateAllUpstreamSignalStatesFromDevice();
    void UpdateAllDownstreamSignalStatesFromDevice();
    void UpdateUpstreamSignalState(int nRow, int nCol, bool bNewState);
    void UpdateDownstreamSignalState(int nRow, int nCol, bool bNewState);
private:
    SERVO::CEquipment* m_pEquipment;
    CBlButton* m_pBtn[8][8];
    CBlButton* m_pBtnUpstream[8][8];
    CBlButton* m_pBtnDwonstream[8][4];
    BOOL m_bEnable;
// 对话框数据
SourceCode/Bond/Servo/Servo.rc
Binary files differ
SourceCode/Bond/Servo/resource.h
Binary files differ