#pragma once #include "BlButton.h" #include #include "AccordionWnd.h" #include "ProductionStats.h" #include "CPageProdOverview.h" // CPanelProduction dialog class CPanelProduction : public CDialogEx { DECLARE_DYNAMIC(CPanelProduction) public: CPanelProduction(CWnd* pParent = nullptr); // standard constructor virtual ~CPanelProduction(); int getPanelWidth(); void setPanelWidth(int width); private: COLORREF m_crBkgnd; HBRUSH m_hbrBkgnd; int m_nPanelWidth; CBlButton m_btnClose; HWND m_hPlaceholder; CAccordionWnd* m_pAccordionWnd; // Production shift summaries (updated by background thread) ProductionShiftSummary m_daySummary; ProductionShiftSummary m_nightSummary; BOOL m_bShiftSummaryValid; CCriticalSection m_csShiftSummary; CWinThread* m_pStatsThread; CEvent m_evStopStats; CPageProdOverview* m_pPageProdOverview; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_PANEL_PRODUCTION }; #endif DECLARE_MESSAGE_MAP() public: virtual BOOL OnInitDialog(); afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); afx_msg void OnDestroy(); afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnVLineMoveX(NMHDR* nmhdr, LRESULT* result); afx_msg void OnBnClickedButtonClose(); // Thread-safe snapshots for UI timer display BOOL TryGetDayNightSummaries(ProductionShiftSummary& outDay, ProductionShiftSummary& outNight); private: static UINT AFX_CDECL StatsThreadProc(LPVOID pParam); void StartStatsThread(); void StopStatsThread(); public: afx_msg void OnTimer(UINT_PTR nIDEvent); };