mrDarker
2025-06-21 f65a110d7f941ff8826406938408fb2828c43dcb
1. 初始化读取第一个port数据到界面
2. 切换port下拉框更新界面
已修改2个文件
81 ■■■■■ 文件已修改
SourceCode/Bond/Servo/PortConfigurationDlg.cpp 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/PortConfigurationDlg.h 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/PortConfigurationDlg.cpp
@@ -19,7 +19,11 @@
CPortConfigurationDlg::CPortConfigurationDlg(CWnd* pParent /*=nullptr*/)
    : CDialogEx(IDD_DIALOG_PORT_CONFIGURATION, pParent)
{
    // 初始化成员变量
    m_pPort[0] = dynamic_cast<SERVO::CLoadPort*>(theApp.m_model.m_master.getEquipment(EQ_ID_LOADPORT1));
    m_pPort[1] = dynamic_cast<SERVO::CLoadPort*>(theApp.m_model.m_master.getEquipment(EQ_ID_LOADPORT2));
    m_pPort[2] = dynamic_cast<SERVO::CLoadPort*>(theApp.m_model.m_master.getEquipment(EQ_ID_LOADPORT3));
    m_pPort[3] = dynamic_cast<SERVO::CLoadPort*>(theApp.m_model.m_master.getEquipment(EQ_ID_LOADPORT4));
}
CPortConfigurationDlg::~CPortConfigurationDlg()
@@ -35,6 +39,52 @@
    return -1; // 未知端口
}
void CPortConfigurationDlg::LoadPortConfigToUI(SERVO::CLoadPort* pPort)
{
    if (!pPort) {
        return;
    }
    SetDlgItemText(IDC_EDIT_LOTID, "");
    SetDlgItemText(IDC_EDIT_PRODUCTID, "");
    SetDlgItemText(IDC_EDIT_OPERATIONID, "");
    m_comboMaterialsType.SetCurSel(0);
    bool bJobInfoSet = false;
    for (int i = 0; i < SLOT_MAX; ++i) {
        SERVO::CSlot* pSlot = pPort->getSlot(i);
        if (!pSlot) {
            continue;
        }
        SERVO::CGlass* pGlass = dynamic_cast<SERVO::CGlass*>(pSlot->getContext());
        int nRow = i + 1;
        // 设置 Panel ID 和勾选框
        CGridCellCheck* pCheck = static_cast<CGridCellCheck*>(m_wndGrid.GetCell(nRow, 1));
        if (pCheck && pGlass) {
            pCheck->SetCheck(pSlot->isEnable() ? TRUE : FALSE);
            pCheck->SetText(pGlass ? pGlass->getID().c_str() : _T(""));
        }
        else {
            pCheck->SetCheck(FALSE);
            pCheck->SetText(_T(""));
        }
        // 回填 Job 信息(只取第一个有效 Glass)
        if (!bJobInfoSet && pGlass) {
            SERVO::CJobDataS* pJS = pGlass->getJobDataS();
            if (pJS) {
                SetDlgItemText(IDC_EDIT_LOTID, CString(pJS->getLotId().c_str()));
                SetDlgItemText(IDC_EDIT_PRODUCTID, CString(pJS->getProductId().c_str()));
                SetDlgItemText(IDC_EDIT_OPERATIONID, CString(pJS->getOperationId().c_str()));
                m_comboMaterialsType.SetCurSel(pJS->getMaterialsType() - 1);
                bJobInfoSet = true;
            }
        }
    }
}
void CPortConfigurationDlg::InitGrid()
{
    if (m_wndGrid.GetSafeHwnd() == NULL) {
@@ -43,7 +93,7 @@
    const int nCols = 2;
    const int nFixRows = 1;
    const int nRows = 9;
    const int nRows = SLOT_MAX + 1; // 存在表头,所以 +1
    int nColIdx = 0;
    m_wndGrid.DeleteAllItems();
@@ -64,8 +114,6 @@
    // 设置列宽
    m_wndGrid.SetColumnWidth(nColIdx, 50);
    m_wndGrid.SetItemText(0, nColIdx++, _T("Slot ID"));
    m_wndGrid.SetColumnWidth(nColIdx, 150);
    m_wndGrid.SetItemText(0, nColIdx++, _T("Panel ID"));
    m_wndGrid.SetColumnWidth(nColIdx, 60);
    m_wndGrid.SetItemText(0, nColIdx++, _T("启用"));
@@ -130,6 +178,7 @@
BEGIN_MESSAGE_MAP(CPortConfigurationDlg, CDialogEx)
    ON_CBN_SELCHANGE(IDC_COMBO_PORT, &CPortConfigurationDlg::OnSelchangeComboPort)
    ON_BN_CLICKED(IDC_BUTTON_APPLY, &CPortConfigurationDlg::OnBnClickedButtonApply)
END_MESSAGE_MAP()
@@ -160,14 +209,31 @@
    for (const auto& item : materialTypes) {
        m_comboMaterialsType.AddString(item);
    }
    m_comboMaterialsType.SetCurSel(0); // 默认选择第一个物料类型
    m_comboMaterialsType.SetCurSel(0);  // 默认选择第一个物料类型
    InitGrid();
    LoadPortConfigToUI(m_pPort[0]);     // 默认加载第一个端口的配置
    // 设置对话框标题
    SetWindowText(_T("Port Configuration"));
    return TRUE;  // return TRUE unless you set the focus to a control
    // 异常: OCX 属性页应返回 FALSE
}
void CPortConfigurationDlg::OnSelchangeComboPort()
{
    // TODO: 在此添加控件通知处理程序代码
    int selPort = m_comboPort.GetCurSel();
    if (selPort < 0 || selPort >= 4) {
        return; // 无效选择
    }
    // 加载选中端口的配置到 UI
    LoadPortConfigToUI(m_pPort[selPort]);
}
void CPortConfigurationDlg::OnBnClickedButtonApply()
{
    // TODO: 在此添加控件通知处理程序代码
SourceCode/Bond/Servo/PortConfigurationDlg.h
@@ -1,6 +1,7 @@
#pragma once
#include "afxdialogex.h"
#include "GridCtrl.h"
#include "CLoadPort.h"
// CPortConfigurationDlg 对话框
@@ -20,14 +21,18 @@
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
    virtual BOOL OnInitDialog();
    afx_msg void OnSelchangeComboPort();
    afx_msg void OnBnClickedButtonApply();
    DECLARE_MESSAGE_MAP()
private:
    int GetLoadPortEqID(const std::string& strPortName);
    void LoadPortConfigToUI(SERVO::CLoadPort* pPort);
    void InitGrid();
    void FillGrid();
    SERVO::CLoadPort* m_pPort[4];
    CGridCtrl m_wndGrid;
    CComboBox m_comboPort;
    CComboBox m_comboRecipe;