| 2025-08-21 | LAPTOP-SNT8I5JK\Boounion | ![]() |
| 2025-08-20 | LAPTOP-SNT8I5JK\Boounion | ![]() |
| 2025-08-20 | LAPTOP-SNT8I5JK\Boounion | ![]() |
| 2025-08-20 | LAPTOP-SNT8I5JK\Boounion | ![]() |
| 2025-08-20 | LAPTOP-SNT8I5JK\Boounion | ![]() |
| SourceCode/Bond/Servo/CControlJobDlg.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CControlJobDlg.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CExpandableListCtrl.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CExpandableListCtrl.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/Servo.rc | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/Servo.vcxproj | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/Servo.vcxproj.filters | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/ServoDlg.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/TopToolbar.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/TopToolbar.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/resource.h | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/x64/Debug/Res/ControlJob_Gray_32.ico | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/x64/Debug/Res/ControlJob_High_32.ico | 补丁 | 查看 | 原始文档 | blame | 历史 |
SourceCode/Bond/Servo/CControlJobDlg.cpp
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,68 @@ // CControlJobDlg.cpp: å®ç°æä»¶ // #include "stdafx.h" #include "Servo.h" #include "CControlJobDlg.h" #include "afxdialogex.h" // CControlJobDlg å¯¹è¯æ¡ IMPLEMENT_DYNAMIC(CControlJobDlg, CDialogEx) CControlJobDlg::CControlJobDlg(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_DIALOG_CONTROL_JOB, pParent) { } CControlJobDlg::~CControlJobDlg() { } void CControlJobDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_LIST1, m_listCtrl); } BEGIN_MESSAGE_MAP(CControlJobDlg, CDialogEx) END_MESSAGE_MAP() // CControlJobDlg æ¶æ¯å¤çç¨åº BOOL CControlJobDlg::OnInitDialog() { CDialogEx::OnInitDialog(); HIMAGELIST imageList = ImageList_Create(24, 24, ILC_COLOR24, 1, 1); ListView_SetImageList(m_listCtrl.GetSafeHwnd(), imageList, LVSIL_SMALL); // m_list å·²ç»æ¯å¯¹è¯æ¡ä¸ç CExpandableListCtrl æåï¼ææ§ä»¶æ¹ç±»ï¼ m_listCtrl.ModifyStyle(0, LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS); m_listCtrl.InsertColumn(0, _T("åç§°"), LVCFMT_LEFT, 260); m_listCtrl.InsertColumn(1, _T("ç¶æ"), LVCFMT_LEFT, 120); m_listCtrl.InsertColumn(2, _T("æè¿°"), LVCFMT_LEFT, 260); auto* root1 = m_listCtrl.InsertRoot({ _T("EFEM"), _T("Ready"), _T("Front End Module") }); m_listCtrl.InsertChild(root1, { _T("Slot #1"), _T("OK"), _T("150mm wafer") }); m_listCtrl.InsertChild(root1, { _T("Slot #2"), _T("Empty"), _T("") }); auto* root2 = m_listCtrl.InsertRoot({ _T("Bonder"), _T("Run"), _T("G1+G2 Process") }); auto* ch21 = m_listCtrl.InsertChild(root2, { _T("Job A"), _T("Proc"), _T("Step 1") }); m_listCtrl.InsertChild(ch21, { _T("SubStep A1"), _T("Done"), _T("Align") }); m_listCtrl.InsertChild(ch21, { _T("SubStep A2"), _T("Run"), _T("Bond") }); // åå§è®©é¡¶å±å±å¼ root1->expanded = true; root2->expanded = true; m_listCtrl.RebuildVisible(); return TRUE; // return TRUE unless you set the focus to a control // å¼å¸¸: OCX 屿§é¡µåºè¿å FALSE } SourceCode/Bond/Servo/CControlJobDlg.h
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,30 @@ #pragma once #include "CExpandableListCtrl.h" // CControlJobDlg å¯¹è¯æ¡ class CControlJobDlg : public CDialogEx { DECLARE_DYNAMIC(CControlJobDlg) public: CControlJobDlg(CWnd* pParent = nullptr); // æ åæé 彿° virtual ~CControlJobDlg(); protected: CExpandableListCtrl m_listCtrl; // å¯¹è¯æ¡æ°æ® #ifdef AFX_DESIGN_TIME enum { IDD = IDD_DIALOG_CONTROL_JOB }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV æ¯æ DECLARE_MESSAGE_MAP() public: virtual BOOL OnInitDialog(); }; SourceCode/Bond/Servo/CExpandableListCtrl.cpp
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,313 @@ #include "stdafx.h" #include "CExpandableListCtrl.h" IMPLEMENT_DYNAMIC(CExpandableListCtrl, CListCtrl) CExpandableListCtrl::CExpandableListCtrl() {} CExpandableListCtrl::~CExpandableListCtrl() {} BEGIN_MESSAGE_MAP(CExpandableListCtrl, CListCtrl) ON_WM_CREATE() ON_NOTIFY_REFLECT(NM_CLICK, &CExpandableListCtrl::OnClick) ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, &CExpandableListCtrl::OnCustomDraw) END_MESSAGE_MAP() int CExpandableListCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CListCtrl::OnCreate(lpCreateStruct) == -1) return -1; // æ¥è¡¨é£æ ¼åä¸¾ä¾ SetExtendedStyle(GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP | LVS_EX_GRIDLINES | LVS_EX_DOUBLEBUFFER); return 0; } void CExpandableListCtrl::PreSubclassWindow() { // æ¥è¡¨é£æ ¼åä¸¾ä¾ SetExtendedStyle(GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP | LVS_EX_GRIDLINES | LVS_EX_DOUBLEBUFFER); CListCtrl::PreSubclassWindow(); } CExpandableListCtrl::Node* CExpandableListCtrl::InsertRoot(const std::vector<CString>& cols) { auto n = std::make_unique<Node>((int)max(1, (int)cols.size())); for (size_t i = 0; i < cols.size(); ++i) n->cols[i] = cols[i]; n->level = 0; Node* raw = n.get(); m_roots.emplace_back(std::move(n)); return raw; } CExpandableListCtrl::Node* CExpandableListCtrl::InsertChild(Node* parent, const std::vector<CString>& cols) { ASSERT(parent); auto n = std::make_unique<Node>((int)max(1, (int)cols.size())); for (size_t i = 0; i < cols.size(); ++i) n->cols[i] = cols[i]; n->parent = parent; n->level = parent->level + 1; Node* raw = n.get(); parent->children.emplace_back(std::move(n)); return raw; } void CExpandableListCtrl::appendVisible(Node* n) { m_visible.push_back(n); if (n->expanded) { for (auto& ch : n->children) { appendVisible(ch.get()); } } } void CExpandableListCtrl::RebuildVisible() { // 1) é建å¯è§åºå m_visible.clear(); for (auto& r : m_roots) appendVisible(r.get()); // 2) éç»/éå¡«æ°æ® SetRedraw(FALSE); DeleteAllItems(); // æå ¥å¯è§è¡ for (int i = 0; i < (int)m_visible.size(); ++i) { Node* n = m_visible[i]; LVITEM lvi{}; lvi.mask = LVIF_TEXT; lvi.iItem = i; lvi.iSubItem = 0; lvi.pszText = const_cast<LPTSTR>((LPCTSTR)(n->cols.empty() ? _T("") : n->cols[0])); InsertItem(&lvi); for (int col = 1; col < GetHeaderCtrl()->GetItemCount(); ++col) { CString txt = (col < (int)n->cols.size()) ? n->cols[col] : _T(""); SetItemText(i, col, txt); } } SetRedraw(TRUE); Invalidate(); } void CExpandableListCtrl::Expand(Node* n) { if (!n || n->children.empty()) return; if (!n->expanded) { n->expanded = true; RebuildVisible(); } } void CExpandableListCtrl::Collapse(Node* n) { if (!n || n->children.empty()) return; if (n->expanded) { n->expanded = false; RebuildVisible(); } } void CExpandableListCtrl::Toggle(Node* n) { if (!n || n->children.empty()) return; n->expanded = !n->expanded; RebuildVisible(); } CExpandableListCtrl::Node* CExpandableListCtrl::GetNodeByVisibleIndex(int i) const { if (i < 0 || i >= (int)m_visible.size()) return nullptr; return m_visible[i]; } CRect CExpandableListCtrl::expanderRectForRow(int row) const { CRect rcLabel; if (!const_cast<CExpandableListCtrl*>(this)->GetSubItemRect(row, 0, LVIR_LABEL, rcLabel)) return CRect(0, 0, 0, 0); Node* n = const_cast<CExpandableListCtrl*>(this)->GetNodeByVisibleIndex(row); if (!n || n->children.empty()) return CRect(0, 0, 0, 0); // å¶åä¸å ä½ï¼ææ¬å°±ä¸ä¼è¢«å¤æ¨ä¸æ ¼ const int indent = n->level; const int left = rcLabel.left + m_expanderPadding + indent * 16; return CRect( left, rcLabel.CenterPoint().y - m_expanderSize / 2, left + m_expanderSize, rcLabel.CenterPoint().y + m_expanderSize / 2 ); } void CExpandableListCtrl::OnClick(NMHDR* pNMHDR, LRESULT* pResult) { LPNMITEMACTIVATE pia = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); if (pia->iItem >= 0) { CPoint pt = pia->ptAction; // å½ä¸å±å¼æé®ï¼ CRect expRc = expanderRectForRow(pia->iItem); if (expRc.PtInRect(pt)) { Node* n = GetNodeByVisibleIndex(pia->iItem); if (n && !n->children.empty()) { Toggle(n); } } } *pResult = 0; } void CExpandableListCtrl::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult) { LPNMLVCUSTOMDRAW pCD = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR); switch (pCD->nmcd.dwDrawStage) { case CDDS_PREPAINT: *pResult = CDRF_NOTIFYITEMDRAW | CDRF_NOTIFYSUBITEMDRAW; return; case CDDS_ITEMPREPAINT: *pResult = CDRF_NOTIFYSUBITEMDRAW; return; case CDDS_ITEMPREPAINT | CDDS_SUBITEM: { const int row = (int)pCD->nmcd.dwItemSpec; const int col = pCD->iSubItem; CDC* pDC = CDC::FromHandle(pCD->nmcd.hdc); if (col == 0) { CRect rc; GetSubItemRect(row, 0, LVIR_LABEL, rc); Node* n = GetNodeByVisibleIndex(row); if (!n) { *pResult = CDRF_DODEFAULT; return; } // 1) èæ¯/忝é¢è²ï¼ææ¯å¦éä¸ const bool selected = (GetItemState(row, LVIS_SELECTED) & LVIS_SELECTED) != 0; const bool focusOnCtrl = (GetSafeHwnd() == ::GetFocus()); COLORREF bk = selected ? GetSysColor(focusOnCtrl ? COLOR_HIGHLIGHT : COLOR_3DFACE) : ListView_GetBkColor(m_hWnd); COLORREF txt = selected ? GetSysColor(focusOnCtrl ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT) : ListView_GetTextColor(m_hWnd); // ä» å¨éè¦æ¶å¡«å èæ¯ï¼é¿å âé»ä¸çâï¼ CBrush bkBrush(bk); pDC->FillRect(rc, &bkBrush); // 2) å±å¼/æå æç¤ºï¼åèæ§é¡¹ç®çå³å¯¹é½åæ æ³ï¼ååç´ å¯¹é½ï¼çº¯GDIï¼ if (!n->children.empty()) { CRect box = expanderRectForRow(row); // ---- å¯è°åæ°ï¼ä¸æ§ä»£ç å½åä¸è´ ---- // å³ä¾§çç½ï¼ä¸ææ¬é´é/ç½æ ¼çº¿ä¿æè·ç¦»ï¼ const int ROFFSET = 2; // éå/å±å¼çâ宽度â设置ï¼å¥æ°æ´é¡ºç¼ï¼9/11 é½è¡ï¼ const int WIDE = max(9, min(min(box.Width(), box.Height()), 13)); // â¶ çè¾¹é¿ const int WIDE2 = WIDE / 2; // ä¸å const int EXPANDED_WIDE = WIDE; // â¼ çè¾¹é¿ // 轻微å 缩ï¼é¿å è´´è¾¹ï¼ä¸ä½ æ§ä»£ç âæé®è¦å·ä¸ä¸âåæï¼ box.DeflateRect(1, 1); // ç»ä¸åå¶æ°å¯¹é½ï¼åå°ååç´ é¯é½¿ auto even = [](int v) { return (v & 1) ? (v - 1) : v; }; // 计ç®âèªä¸åä¸âçåºååç§»ï¼ä¸æ§ TreeCtrl ä¸è´ // è¿éç¨ box ä½ä¸º pRect POINT pt[3]; if (n->expanded) { // â¼ int nBottomOffset = (box.Height() - EXPANDED_WIDE) / 2; pt[0].x = box.right - ROFFSET - EXPANDED_WIDE; pt[0].y = box.bottom - nBottomOffset; pt[1].x = box.right - ROFFSET; pt[1].y = box.bottom - nBottomOffset; pt[2].x = box.right - ROFFSET; pt[2].y = box.bottom - nBottomOffset - EXPANDED_WIDE; } else { // â¶ int nBottomOffset = (box.Height() - WIDE) / 2; pt[0].x = box.right - ROFFSET - WIDE2; pt[0].y = box.bottom - nBottomOffset - WIDE; pt[1].x = box.right - ROFFSET - WIDE2; pt[1].y = box.bottom - nBottomOffset; pt[2].x = box.right - ROFFSET; pt[2].y = box.bottom - nBottomOffset - WIDE2; } // ä» å¡«å ï¼ä¸æè¾¹ï¼æè¾¹ä¼å éå°é¶æï¼ï¼é¢è²ç¨ txt ä¸ä¸»é¢ä¸è´ HGDIOBJ oldPen = pDC->SelectObject(GetStockObject(NULL_PEN)); HBRUSH hBrush = CreateSolidBrush(txt); HGDIOBJ oldBrush = pDC->SelectObject(hBrush); pDC->Polygon(pt, 3); pDC->SelectObject(oldPen); pDC->SelectObject(oldBrush); DeleteObject(hBrush); } // 3) ææ¬ï¼åºäºé¦ååºåå³ç§»ï¼åºåæ¯å¦æåèç¹ï¼ const int indentPx = n->level * 14; const int baseLeft = rc.left + m_expanderPadding + indentPx; CRect textRc = rc; if (!n->children.empty()) { // æå项ï¼é¢çæé®ä½ + ææ¬é´é textRc.left = baseLeft + m_expanderSize + m_textGap; } else { // å¶åè¡ï¼ä¸é¢çæé®ä½ï¼åªç»ä¸ç¹ç¹å¶åé´éï¼è®©å±çº§ç¼©è¿ä»ç¶çæï¼ constexpr int kLeafGap = 2; // ä½ å¯è° 0~4 textRc.left = baseLeft + kLeafGap; } pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(txt); CString txt0 = n->cols.empty() ? _T("") : n->cols[0]; pDC->DrawText(txt0, textRc, DT_SINGLELINE | DT_VCENTER | DT_NOPREFIX | DT_END_ELLIPSIS); // ââ ç»å®ä¸è§ä¸ææ¬ä¹åï¼è¡¥ä¸æ¡è¯¥è¡çåºé¨æ¨ªåç½æ ¼çº¿ ââ // ä» å½å¼å¯äº LVS_EX_GRIDLINES æç»å¶ if (GetExtendedStyle() & LVS_EX_GRIDLINES) { // ç¨æ´è¡ boundsï¼ä¿è¯æ¨ªçº¿è´¯ç©¿ææåçå¯è§å®½åº¦ CRect rcRow; GetSubItemRect(row, 0, LVIR_BOUNDS, rcRow); // åºè¾¹ y åæ ï¼ä¸ç³»ç»ç½æ ¼çº¿å¯¹é½ï¼ const int y = rcRow.bottom - 1; // é¢è²ä¸ç³»ç»é£æ ¼æ¥è¿ï¼è¥è§å¾åæµ ï¼å¯æ¢ COLOR_3DSHADOW CPen pen(PS_SOLID, 1, GetSysColor(COLOR_3DLIGHT)); CPen* oldPen = pDC->SelectObject(&pen); // 横线ä»è¡å·¦å°è¡å³ï¼å½åå¯è§åºåï¼ pDC->MoveTo(rcRow.left, y); pDC->LineTo(rcRow.right, y); pDC->SelectObject(oldPen); } *pResult = CDRF_SKIPDEFAULT; return; } // å ¶ä»åé»è®¤ç»å¶ *pResult = CDRF_DODEFAULT; return; } } *pResult = CDRF_DODEFAULT; } SourceCode/Bond/Servo/CExpandableListCtrl.h
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,58 @@ #pragma once #include <vector> #include <memory> class CExpandableListCtrl : public CListCtrl { DECLARE_DYNAMIC(CExpandableListCtrl) public: struct Node { Node* parent = nullptr; std::vector<std::unique_ptr<Node>> children; std::vector<CString> cols; // ååææ¬ bool expanded = false; int level = 0; // 缩è¿å±çº§ Node(int nCols = 1) : cols(nCols) {} }; CExpandableListCtrl(); virtual ~CExpandableListCtrl(); // æ°æ®æå»º Node* InsertRoot(const std::vector<CString>& cols); Node* InsertChild(Node* parent, const std::vector<CString>& cols); // å±å¼/æå void Expand(Node* n); void Collapse(Node* n); void Toggle(Node* n); // å·æ°å¯è§å表 void RebuildVisible(); // 便æ·ï¼éè¿å¯è§è¡å·å Node* Node* GetNodeByVisibleIndex(int i) const; private: void appendVisible(Node* n); CRect expanderRectForRow(int row) const; // é¦åå±å¼æé®åºå virtual void PreSubclassWindow(); protected: // æ¶æ¯ afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnClick(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult); DECLARE_MESSAGE_MAP() private: std::vector<std::unique_ptr<Node>> m_roots; // é¡¶å±èç¹ std::vector<Node*> m_visible; // å±å¼åçå¯è§èç¹é¡ºåº int m_expanderPadding = 6; // é¦åå ä¾§è¾¹è· int m_expanderSize = 10; // å°ä¸è§/æ¹åå¤§å° int m_textGap = 6; }; SourceCode/Bond/Servo/Servo.rcBinary files differ
SourceCode/Bond/Servo/Servo.vcxproj
@@ -202,9 +202,11 @@ <ItemGroup> <ClInclude Include="CBaseDlg.h" /> <ClInclude Include="CControlJob.h" /> <ClInclude Include="CControlJobDlg.h" /> <ClInclude Include="CCustomCheckBox.h" /> <ClInclude Include="CCollectionEvent.h" /> <ClInclude Include="CEquipmentPage3.h" /> <ClInclude Include="CExpandableListCtrl.h" /> <ClInclude Include="CGlassPool.h" /> <ClInclude Include="ChangePasswordDlg.h" /> <ClInclude Include="CMyStatusbar.h" /> @@ -354,9 +356,11 @@ <ItemGroup> <ClCompile Include="CBaseDlg.cpp" /> <ClCompile Include="CControlJob.cpp" /> <ClCompile Include="CControlJobDlg.cpp" /> <ClCompile Include="CCustomCheckBox.cpp" /> <ClCompile Include="CCollectionEvent.cpp" /> <ClCompile Include="CEquipmentPage3.cpp" /> <ClCompile Include="CExpandableListCtrl.cpp" /> <ClCompile Include="CGlassPool.cpp" /> <ClCompile Include="ChangePasswordDlg.cpp" /> <ClCompile Include="CMyStatusbar.cpp" /> SourceCode/Bond/Servo/Servo.vcxproj.filters
@@ -178,6 +178,8 @@ <ClCompile Include="CPageCollectionEvent.cpp" /> <ClCompile Include="ProcessJob.cpp" /> <ClCompile Include="CControlJob.cpp" /> <ClCompile Include="CExpandableListCtrl.cpp" /> <ClCompile Include="CControlJobDlg.cpp" /> </ItemGroup> <ItemGroup> <ClInclude Include="AlarmManager.h" /> @@ -362,6 +364,8 @@ <ClInclude Include="ProcessJob.h" /> <ClInclude Include="CControlJob.h" /> <ClInclude Include="SerializeUtil.h" /> <ClInclude Include="CExpandableListCtrl.h" /> <ClInclude Include="CControlJobDlg.h" /> </ItemGroup> <ItemGroup> <ResourceCompile Include="Servo.rc" /> SourceCode/Bond/Servo/ServoDlg.cpp
@@ -26,6 +26,7 @@ #include "CPageVarialbles.h" #include "CPageReport.h" #include "CPageCollectionEvent.h" #include "CControlJobDlg.h" #ifdef _DEBUG @@ -351,7 +352,8 @@ HMENU hMenu = m_pTopToolbar->GetOperatorMenu(); ASSERT(hMenu); ::EnableMenuItem(hMenu, ID_OPEATOR_SWITCH, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); m_pTopToolbar->GetBtn(IDC_BUTTON_JOBS)->EnableWindow(TRUE); // Tab m_pPageGraph1 = new CPageGraph1(); @@ -977,6 +979,10 @@ m_pTopToolbar->GetBtn(IDC_BUTTON_STOP)->EnableWindow(FALSE); } } else if (id == IDC_BUTTON_JOBS) { CControlJobDlg dlg; dlg.DoModal(); } else if (id == IDC_BUTTON_PORT_CONFIG) { CPortConfigurationDlg dlg; dlg.DoModal(); SourceCode/Bond/Servo/TopToolbar.cpp
@@ -29,6 +29,7 @@ DDX_Control(pDX, IDC_BUTTON_RUN, m_btnRun); DDX_Control(pDX, IDC_BUTTON_RUN_CT, m_btnRunCt); DDX_Control(pDX, IDC_BUTTON_STOP, m_btnStop); DDX_Control(pDX, IDC_BUTTON_JOBS, m_btnCJobs); DDX_Control(pDX, IDC_BUTTON_ALARM, m_btnAlarm); DDX_Control(pDX, IDC_BUTTON_SETTINGS, m_btnSettings); DDX_Control(pDX, IDC_BUTTON_PORT_CONFIG, m_btnPortConfig); @@ -56,6 +57,7 @@ InitBtn(m_btnRunCt, "RunCt_High_32.ico", "RunCt_Gray_32.ico"); InitBtn(m_btnStop, "Stop_High_32.ico", "Stop_Gray_32.ico"); InitBtn(m_btnAlarm, "Alarm_o_32.ico", "Alarm_gray_32.ico"); InitBtn(m_btnCJobs, "ControlJob_High_32.ico", "ControlJob_Gray_32.ico"); InitBtn(m_btnSettings, "Settings_High_32.ico", "Settings_Gray_32.ico"); InitBtn(m_btnRobot, "Robot_High_32.ico", "Robot_Gray_32.ico"); InitBtn(m_btnPortConfig, "PortConfig_High_32.ico", "PortConfig_Gray_32.ico"); @@ -124,6 +126,11 @@ x += 2; pItem = GetDlgItem(IDC_BUTTON_STOP); pItem->MoveWindow(x, y, BTN_WIDTH, nBthHeight); x += BTN_WIDTH; x += 2; pItem = GetDlgItem(IDC_BUTTON_JOBS); pItem->MoveWindow(x, y, BTN_WIDTH, nBthHeight); x += BTN_WIDTH; x += 2; @@ -199,6 +206,7 @@ case IDC_BUTTON_RUN: case IDC_BUTTON_RUN_CT: case IDC_BUTTON_STOP: case IDC_BUTTON_JOBS: case IDC_BUTTON_ALARM: case IDC_BUTTON_SETTINGS: case IDC_BUTTON_PORT_CONFIG: SourceCode/Bond/Servo/TopToolbar.h
@@ -33,6 +33,7 @@ CBlButton m_btnRun; CBlButton m_btnRunCt; CBlButton m_btnStop; CBlButton m_btnCJobs; CBlButton m_btnAlarm; CBlButton m_btnSettings; CBlButton m_btnPortConfig; SourceCode/Bond/Servo/resource.hBinary files differ
SourceCode/Bond/x64/Debug/Res/ControlJob_Gray_32.ico
SourceCode/Bond/x64/Debug/Res/ControlJob_High_32.ico