LAPTOP-SNT8I5JK\Boounion
2025-09-18 df4d0e875ccfe40add25100a75dedee54e566aaa
SourceCode/Bond/Servo/CCjPage2.cpp
@@ -32,6 +32,10 @@
   ON_WM_DESTROY()
    ON_EN_CHANGE(IDC_EDIT_PJ_ID, &CCjPage2::OnEnChangeEditPjId)
    ON_CBN_SELCHANGE(IDC_COMBO_RECIPE, &CCjPage2::OnCbnSelchangeComboRecipe)
    ON_BN_CLICKED(IDC_RADIO1, &CCjPage2::OnBnClickedRadio1)
    ON_BN_CLICKED(IDC_RADIO2, &CCjPage2::OnBnClickedRadio2)
    ON_BN_CLICKED(IDC_RADIO3, &CCjPage2::OnBnClickedRadio3)
    ON_BN_CLICKED(IDC_RADIO4, &CCjPage2::OnBnClickedRadio4)
END_MESSAGE_MAP()
@@ -43,50 +47,32 @@
    UpdatePjData();
}
void CCjPage2::SetPjWarps(std::vector<PJWarp>& pjs)
{
    m_pjWarps = pjs;
}
BOOL CCjPage2::OnInitDialog()
{
    CCjPageBase::OnInitDialog();
    // 若你的资源里有一个占位的 ListCtrl(比如 IDC_LIST1),这里做子类化:
    m_selector.SubclassDlgItem(IDC_LIST_SELECTOR, this);
    m_grid.SubclassDlgItem(IDC_GRID1, this);
     m_grid.InitGrid(4, 8);
    m_grid.SetColumnWidths(100, 220);
    m_grid.SetRowHeight(28);
    m_grid.SetHeaderHeight(32);
    m_grid.EnableColumnResize(FALSE); // 禁止拖动列宽
    // 初始化:4 列 × 8 行
    m_selector.InitGrid(4, 8);
    m_selector.SetColumnWidths(100, 180);
    m_selector.SetRowHeight(36);
    // 设置列信息
    m_selector.SetPortInfo(0, _T("Port 1"), _T("Carrier A"));
    m_selector.SetPortInfo(1, _T("Port 2"), _T("Carrier B"));
    m_selector.SetPortInfo(2, _T("Port 3"), _T("Carrier C"));
    m_selector.SetPortInfo(3, _T("Port 4"), _T("Carrier D"));
    // 设置部分 Glass(核心ID固定)
    m_selector.SetSlotGlass(0, 0, TRUE, _T("001"), CCarrierSlotSelector::MAT_G1);
    m_selector.SetSlotGlass(0, 1, TRUE, _T("002"), CCarrierSlotSelector::MAT_G1);
    m_selector.SetSlotGlass(0, 3, TRUE, _T("004"), CCarrierSlotSelector::MAT_G1);
    m_selector.SetSlotGlass(1, 0, TRUE, _T("101"), CCarrierSlotSelector::MAT_G2);
    m_selector.SetSlotGlass(1, 1, TRUE, _T("102"), CCarrierSlotSelector::MAT_G2);
    m_selector.SetSlotGlass(1, 2, TRUE, _T("103"), CCarrierSlotSelector::MAT_G2);
    m_selector.SetSlotGlass(1, 5, TRUE, _T("106"), CCarrierSlotSelector::MAT_G2);
    m_selector.SetSlotGlass(1, 7, TRUE, _T("108"), CCarrierSlotSelector::MAT_G2);
    m_selector.SetSlotGlass(2, 5, TRUE, _T("206"), CCarrierSlotSelector::MAT_G1);
    m_selector.SetSlotGlass(2, 6, TRUE, _T("207"), CCarrierSlotSelector::MAT_G1);
    m_selector.SetSlotGlass(2, 7, TRUE, _T("208"), CCarrierSlotSelector::MAT_G1);
    m_selector.SetSlotGlass(3, 0, TRUE, _T("301"), CCarrierSlotSelector::MAT_G1);
    // 锁定 Port 1(示例)
    m_selector.SetPortAllocated(0, TRUE, _T("ProcessJob 1"));
    m_grid.SetPortInfo(0, _T("Port 1"), _T(""));
    m_grid.SetPortInfo(1, _T("Port 2"), _T(""));
    m_grid.SetPortInfo(2, _T("Port 3"), _T(""));
    m_grid.SetPortInfo(3, _T("Port 4"), _T(""));
    UpdatePjData();
        ;
   return TRUE;  // return TRUE unless you set the focus to a control
              // 异常: OCX 属性页应返回 FALSE
}
@@ -101,25 +87,49 @@
void CCjPage2::Resize()
{
    CCjPageBase::Resize();
    /*
    CWnd* pItem;
    CRect rcClient, rcItem;
    GetClientRect(&rcClient);
    pItem = GetDlgItem(IDC_LABEL_TITLE);
    pItem = GetDlgItem(IDC_GRID1);
    pItem->GetWindowRect(&rcItem);
    pItem->MoveWindow(12, 8, rcClient.Width() - 24, rcItem.Height());
    */
    ScreenToClient(rcItem);
    // 让控件窗口尺寸自动匹配当前列宽/行数(不出现滚动条)
    if (::IsWindow(m_grid.m_hWnd)) {
        CSize best = m_grid.CalcBestWindowSize(TRUE); // 计算到含非客户区的最终窗口大小
        pItem->MoveWindow(rcItem.left, rcItem.top, best.cx, best.cy);
        pItem->Invalidate();
    }
}
void CCjPage2::OnApply() 
{
    //SERVO::CProcessJob*
    if (m_pContext == nullptr) return;
    SERVO::CProcessJob* pProcessJob = (SERVO::CProcessJob*)m_pContext;
    PJWarp* pPjWarp = (PJWarp*)m_pContext;
    SERVO::CProcessJob* pProcessJob = (SERVO::CProcessJob*)pPjWarp->pj;
    // 更新名称
    BOOL bOkName = TRUE;
    char szBuffer[256];
    GetDlgItemText(IDC_EDIT_PJ_ID, szBuffer, 256);
    for (auto item : m_pjWarps) {
        if (item.pj != m_pContext) {
            SERVO::CProcessJob* temp = (SERVO::CProcessJob*)item.pj;
            if (temp->id().compare(std::string(szBuffer)) == 0) {
                bOkName = FALSE;
                break;
            }
        }
    }
    if (!bOkName) {
        AfxMessageBox("不能使用和其它Process Job相同的ID");
        return;
    }
    pProcessJob->setId(std::string(szBuffer));
    // 更新配方
@@ -139,8 +149,6 @@
    }
    ContentChanged(1);
}
@@ -156,11 +164,23 @@
    }
    if (m_pContext) {
        SERVO::CProcessJob* pProcessJob = (SERVO::CProcessJob*)m_pContext;
        PJWarp* pPjWarp = (PJWarp*)m_pContext;
        SERVO::CProcessJob* pProcessJob = (SERVO::CProcessJob*)pPjWarp->pj;
        SetDlgItemText(IDC_EDIT_PJ_ID, pProcessJob->id().c_str());
        int idx = pComboBox->FindStringExact(-1, pProcessJob->recipeSpec().c_str());
        if (idx != CB_ERR) pComboBox->SetCurSel(idx);
    }
    // 示例:设置Port信息、锁列、填充Glass
    /*
    m_grid.SetPortInfo(0, _T("Port 1"), _T(""));
    m_grid.SetPortInfo(1, _T("Port 2"), _T(""));
    m_grid.SetPortInfo(2, _T("Port 3"), _T("Carrier C"));
    m_grid.SetPortInfo(3, _T("Port 4"), _T("Carrier D"));
    m_grid.SetPortAllocated(2, TRUE, _T("ProcessJob 1"));
    m_grid.SetSlotGlass(0, 0, TRUE, _T("A00123"), CCarrierSlotGrid::MAT_G1);
    m_grid.SetSlotGlass(0, 1, TRUE, _T("A00124"), CCarrierSlotGrid::MAT_G1);
    */
    m_bContentChangedLock = FALSE;
}
@@ -174,3 +194,35 @@
{
    ContentChanged(0);
}
void CCjPage2::OnBnClickedRadio1()
{
    m_grid.SetPortAllocated(0, FALSE, _T(""));
    m_grid.SetPortAllocated(1, TRUE, _T(""));
    m_grid.SetPortAllocated(2, TRUE, _T(""));
    m_grid.SetPortAllocated(3, TRUE, _T(""));
}
void CCjPage2::OnBnClickedRadio2()
{
    m_grid.SetPortAllocated(0, TRUE, _T(""));
    m_grid.SetPortAllocated(1, FALSE, _T(""));
    m_grid.SetPortAllocated(2, TRUE, _T(""));
    m_grid.SetPortAllocated(3, TRUE, _T(""));
}
void CCjPage2::OnBnClickedRadio3()
{
    m_grid.SetPortAllocated(0, TRUE, _T(""));
    m_grid.SetPortAllocated(1, TRUE, _T(""));
    m_grid.SetPortAllocated(2, FALSE, _T(""));
    m_grid.SetPortAllocated(3, TRUE, _T(""));
}
void CCjPage2::OnBnClickedRadio4()
{
    m_grid.SetPortAllocated(0, TRUE, _T(""));
    m_grid.SetPortAllocated(1, TRUE, _T(""));
    m_grid.SetPortAllocated(2, TRUE, _T(""));
    m_grid.SetPortAllocated(3, FALSE, _T(""));
}