From f6cd6b95c9aa2ad17b199c32553c0b5e06b60bea Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期四, 08 一月 2026 16:06:29 +0800
Subject: [PATCH] 1.部分实现状态变量设置
---
SourceCode/Bond/Servo/JobSlotGrid.cpp | 86 +++++++++++++++++++++++++++++++++---------
1 files changed, 67 insertions(+), 19 deletions(-)
diff --git a/SourceCode/Bond/Servo/JobSlotGrid.cpp b/SourceCode/Bond/Servo/JobSlotGrid.cpp
index 12a4c2f..32243a9 100644
--- a/SourceCode/Bond/Servo/JobSlotGrid.cpp
+++ b/SourceCode/Bond/Servo/JobSlotGrid.cpp
@@ -1,5 +1,6 @@
锘�#include "stdafx.h"
#include "JobSlotGrid.h"
+#include "ServoMemDC.h"
#ifdef _DEBUG
#define new DEBUG_NEW
@@ -221,17 +222,32 @@
void CJobSlotGrid::OnPaint() {
CPaintDC dc(this);
- DrawGrid(&dc);
+ CServoMemDC memDC(&dc);
+ DrawGrid(&memDC);
}
void CJobSlotGrid::DrawGrid(CDC* pDC)
{
CRect rect;
GetClientRect(&rect);
+ pDC->FillSolidRect(&rect, ::GetSysColor(COLOR_3DFACE)); // 瀹夊叏鑳屾櫙鑹诧紝浠呭唴瀛樼粯鍒�
+ if (m_nCols == 0 || m_nRows == 0) {
+ return;
+ }
+
+ // 璁$畻鏍煎瓙灏哄
int nCellWidth = rect.Width() / m_nCols;
int nCellHeight = rect.Height() / m_nRows;
+
+ // 瀛椾綋璁剧疆
CFont* pOldFont = pDC->SelectObject(&m_fontText);
+ pDC->SetBkMode(TRANSPARENT);
+ pDC->SetTextColor(RGB(0, 0, 0));
+
+ // 瀹氫箟棰滆壊甯搁噺
+ constexpr COLORREF COLOR_HOVER = RGB(200, 230, 255);
+ constexpr COLORREF COLOR_CLICK = RGB(0, 120, 215);
for (int i = 0; i < m_nRows; ++i) {
for (int j = 0; j < m_nCols; ++j) {
@@ -241,29 +257,61 @@
bool bIsHover = (m_ptHover.x == j && m_ptHover.y == i);
bool bIsClicking = bIsHover && m_bLButtonDown;
- // 閫夋嫨棰滆壊
- COLORREF fillColor;
- if (bIsClicking) {
- fillColor = RGB(0, 120, 215); // 榧犳爣鎸変笅鑹�
- }
- else if (bIsHover) {
- fillColor = RGB(200, 230, 255); // 鎮仠楂樹寒
- }
- else {
- fillColor = m_vSlotStatus[i][j] ? m_colorHasJob : m_colorNoJob;
+ // 閫夋嫨濉厖棰滆壊
+ COLORREF fillColor = m_vSlotStatus[i][j] ? m_colorHasJob : m_colorNoJob;
+ if (IsSlotClickable(i, j)) {
+ if (bIsClicking) {
+ fillColor = COLOR_CLICK;
+ }
+ else if (bIsHover) {
+ fillColor = COLOR_HOVER;
+ }
}
- // 鐢昏儗鏅�
- CBrush brush(fillColor);
- pDC->FillRect(&cellRect, &brush);
+ // 缁樺埗鑳屾櫙锛堥珮鏁堟浛浠� CBrush锛�
+ pDC->FillSolidRect(&cellRect, fillColor);
- // 杈规
+ // 缁樺埗杈规
pDC->DrawEdge(&cellRect, EDGE_SUNKEN, BF_RECT);
- // 鏂囨湰
- pDC->SetBkMode(TRANSPARENT);
- pDC->SetTextColor(RGB(0, 0, 0));
- pDC->DrawText(m_vSlotText[i][j], &cellRect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
+ // 濡傛灉鏄彲鐐瑰嚮鏍煎瓙锛屽湪宸︿笂瑙掔敾涓�涓皬鍦嗙偣
+ if (IsSlotClickable(i, j)) {
+ constexpr int DOT_RADIUS = 3;
+ int cx = cellRect.left + 5;
+ int cy = cellRect.top + 5;
+
+ // 淇濆瓨鏃х瑪鍜屽埛瀛�
+ CBrush brushDot(RGB(0, 120, 215));
+ CBrush* pOldBrush = pDC->SelectObject(&brushDot);
+ CPen penDot(PS_SOLID, 1, RGB(0, 120, 215));
+ CPen* pOldPen = pDC->SelectObject(&penDot);
+
+ // 缁樺埗鍦嗙偣
+ pDC->Ellipse(cx - DOT_RADIUS, cy - DOT_RADIUS, cx + DOT_RADIUS, cy + DOT_RADIUS);
+
+ // 鎭㈠
+ pDC->SelectObject(pOldBrush);
+ pDC->SelectObject(pOldPen);
+ }
+
+ // 鑾峰彇鏂囧瓧锛堝畨鍏級
+ CString strText;
+ if (i < m_vSlotText.size() && j < m_vSlotText[i].size()) {
+ strText = m_vSlotText[i][j];
+ }
+
+ if (!strText.IsEmpty()) {
+ // 鍏堣绠楁枃瀛楅珮搴︼紙鏀寔鎹㈣锛�
+ CRect calcRect = cellRect;
+ pDC->DrawText(strText, &calcRect, DT_CENTER | DT_WORDBREAK | DT_NOPREFIX | DT_CALCRECT);
+
+ // 閲嶆柊璁惧畾灞呬腑缁樺埗鍖哄煙
+ CRect textRect = cellRect;
+ textRect.top += (cellRect.Height() - calcRect.Height()) / 2;
+
+ // 瀹為檯缁樺埗鏂囧瓧
+ pDC->DrawText(strText, &textRect, DT_CENTER | DT_WORDBREAK | DT_NOPREFIX);
+ }
}
}
--
Gitblit v1.9.3