chenluhua1980
2026-01-19 44360bc2cdeee16be72f9cc4bfb42e0ac26b5b44
SourceCode/Bond/Servo/JobSlotGrid.h
@@ -1,6 +1,9 @@
#pragma once
#include <afxwin.h>
#include <vector>
#include <functional>
using SlotClickCallback = std::function<void(int nRow, int nCol)>;
class CJobSlotGrid : public CWnd
{
@@ -16,15 +19,24 @@
    void SetSlotText(int nRow, int nCol, const CString& strText);
    void SetTextFont(const CString& strFontName, int nPointSize);
    void ClearAll();
    void SetSlotClickable(int nRow, int nCol, bool bClickable);
    bool IsSlotClickable(int nRow, int nCol) const;
    void SetSlotClickCallback(SlotClickCallback fnCallback);
protected:
    afx_msg void OnPaint();
    afx_msg BOOL OnEraseBkgnd(CDC* pDC);
    afx_msg void OnMouseMove(UINT nFlags, CPoint point);
    afx_msg void OnMouseLeave();
    afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
    afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
    DECLARE_MESSAGE_MAP()
private:
    int m_nRows;
    int m_nCols;
    bool m_bLButtonDown = false;             // 鼠标是否按下
    CPoint m_ptHover{ -1, -1 };   // 当前悬停的 cell 索引(row, col)
    CFont m_fontText;
    COLORREF m_colorHasJob;
    COLORREF m_colorNoJob;
@@ -32,6 +44,8 @@
    CBrush m_brushNoJob;
    std::vector<std::vector<bool>> m_vSlotStatus;
    std::vector<std::vector<CString>> m_vSlotText;
    std::vector<std::vector<bool>> m_vSlotClickable;
    SlotClickCallback m_fnSlotClickCallback;
    void DrawGrid(CDC* pDC);
};