| SourceCode/Bond/BondEq/CBaseDlg.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/BondEq/CBaseDlg.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/BondEq/CPageAlarm.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/BondEq/CPageAlarm.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
SourceCode/Bond/BondEq/CBaseDlg.cpp
@@ -9,10 +9,15 @@ CFont g_defaultFont; Theme* g_currentTheme = &g_lightTheme; // 全局资源句柄 HINSTANCE g_hCurrentResource = NULL; IMPLEMENT_DYNAMIC(CBaseDlg, CDialogEx) CBaseDlg::CBaseDlg(UINT id, CWnd* pPage) : CDialogEx(id, pPage), m_bResizing(false) CBaseDlg::CBaseDlg(UINT nID, CWnd* pPage) : CDialogEx(nID, pPage), m_bResizing(false) { m_nID = nID; m_pParent = pPage; m_nInitialWidth = 0; m_nInitialHeight = 0; } @@ -23,6 +28,57 @@ m_mapFonts.clear(); m_mapCtrlLayouts.clear(); m_mapControls.clear(); } void CBaseDlg::SwitchTheme(ThemeType enThemeType) { // 使用 map 来根据 themeType 查找主题 static const std::unordered_map<ThemeType, Theme*> themeMap = { { ThemeType::Light, &g_lightTheme }, { ThemeType::Dark, &g_darkTheme } }; // 设置当前主题 auto it = themeMap.find(enThemeType); if (it != themeMap.end()) { g_currentTheme = it->second; } else { g_currentTheme = &g_lightTheme; } // 更新控件的外观 CWnd* pWnd = GetWindow(GW_CHILD); while (pWnd) { pWnd->Invalidate(); pWnd = pWnd->GetNextWindow(); } // 更新对话框背景颜色 SetBackgroundColor(g_currentTheme->backgroundColor); } void CBaseDlg::LoadResourceLibrary(const CString& strLanguage) { // 卸载之前加载的资源库 UnloadResourceLibrary(); // 加载新的资源库 g_hCurrentResource = AfxLoadLibrary(strLanguage); // 设置新的资源句柄 if (g_hCurrentResource != NULL) { AfxSetResourceHandle(g_hCurrentResource); } } void CBaseDlg::UnloadResourceLibrary() { // 卸载之前加载的资源库 if (g_hCurrentResource != NULL) { FreeLibrary(g_hCurrentResource); // 释放当前资源库 g_hCurrentResource = NULL; // 清空资源句柄 } } CFont* CBaseDlg::GetOrCreateFont(int nFontSize) @@ -104,34 +160,6 @@ return it->second.get(); } return nullptr; } void CBaseDlg::SwitchTheme(ThemeType themeType) { // 使用 map 来根据 themeType 查找主题 static const std::unordered_map<ThemeType, Theme*> themeMap = { { ThemeType::Light, &g_lightTheme }, { ThemeType::Dark, &g_darkTheme } }; // 设置当前主题 auto it = themeMap.find(themeType); if (it != themeMap.end()) { g_currentTheme = it->second; } else { g_currentTheme = &g_lightTheme; } // 更新控件的外观 CWnd* pWnd = GetWindow(GW_CHILD); while (pWnd) { pWnd->Invalidate(); // 重绘控件 pWnd = pWnd->GetNextWindow(); } // 更新对话框背景颜色 SetBackgroundColor(g_currentTheme->backgroundColor); } void CBaseDlg::AdjustControls(float dScaleX, float dScaleY) SourceCode/Bond/BondEq/CBaseDlg.h
@@ -19,8 +19,15 @@ DECLARE_DYNAMIC(CBaseDlg) public: CBaseDlg(UINT id, CWnd* pPage); // 标准构造函数 CBaseDlg(UINT nID, CWnd* pPage); // 标准构造函数 virtual ~CBaseDlg(); // 析构函数 // 主题管理 void SwitchTheme(ThemeType enThemeType); // 切换主题 // 资源管理 void LoadResourceLibrary(const CString& strLanguage); // 加载资源库 void UnloadResourceLibrary(); // 卸载资源库 // 字体管理 CFont* GetOrCreateFont(int nFontSize); // 获取或创建字体 @@ -32,14 +39,13 @@ BOOL UpdateControlText(UINT nCtrlID, const CString& strText); // 更新控件文本 CWnd* GetControl(UINT nCtrlID); // 获取控件 // 主题设置 void SwitchTheme(ThemeType themeType); // 切换主题 private: void AdjustControls(float dScaleX, float dScaleY); // 调整控件大小 void AdjustControlFont(CWnd* pWnd, int nWidth, int nHeight); // 调整控件字体 private: UINT m_nID; // 对话框ID CWnd* m_pParent; // 父窗口 bool m_bResizing; // 控件是否正在调整大小 int m_nInitialWidth; // 对话框初始宽度 int m_nInitialHeight; // 对话框初始高度 SourceCode/Bond/BondEq/CPageAlarm.cpp
@@ -8,6 +8,7 @@ #include "Common.h" #include "ToolUnits.h" #define PAGE_SIZE 20 // CPageAlarm 对话框 @@ -19,6 +20,9 @@ m_crBkgnd = PAGE_BACKGROUND_COLOR; m_hbrBkgnd = nullptr; m_pObserver = nullptr; m_nCurPage = 0; m_nTotalPages = 0; m_nDateTimeFlag = 0; } CPageAlarm::~CPageAlarm() @@ -27,6 +31,8 @@ void CPageAlarm::DoDataExchange(CDataExchange* pDX) { DDX_Control(pDX, IDC_DATETIMEPICKER_START, m_dateTimeStart); DDX_Control(pDX, IDC_DATETIMEPICKER_END, m_dateTimeEnd); CDialogEx::DoDataExchange(pDX); } @@ -35,6 +41,8 @@ ON_WM_CTLCOLOR() ON_WM_DESTROY() ON_WM_SIZE() ON_BN_CLICKED(IDC_BUTTON_PREV_PAGE, &CPageAlarm::OnBnClickedButtonPrevPage) ON_BN_CLICKED(IDC_BUTTON_NEXT_PAGE, &CPageAlarm::OnBnClickedButtonNextPage) END_MESSAGE_MAP() @@ -150,13 +158,12 @@ GetClientRect(&rcClient); pItem = GetDlgItem(IDC_LIST_ALARM); pItem->MoveWindow(12, 12, rcClient.Width() - 24, rcClient.Height() - 24); pItem->MoveWindow(12, 52, rcClient.Width() - 24, rcClient.Height() - 64); } void CPageAlarm::LoadAlarms() { CAlarmMonitor* pMonitor = (CAlarmMonitor*)theApp.m_model.getBonder().GetComponent(ALARM_MONITOR); // 当前正在发生的报警 pMonitor->Lock(); @@ -166,19 +173,9 @@ } pMonitor->Unlock(); // 获取历史报警数据 auto vecData = AlarmManager::getInstance().getAllAlarms(); // 填充数据 CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST_ALARM); for (auto item : vecData) { pListCtrl->InsertItem(0, _T("")); pListCtrl->SetItemText(0, 1, item[0].c_str()); pListCtrl->SetItemText(0, 2, item[1].c_str()); pListCtrl->SetItemText(0, 3, item[2].c_str()); pListCtrl->SetItemText(0, 4, item[3].c_str()); } // 刷新历史报警数据 m_nCurPage = 1; UpdatePageData(); } void CPageAlarm::AddAlarm(CAlarmMonitor* pMonitor, CAlarm* pAlarm) @@ -213,6 +210,74 @@ } } void CPageAlarm::UpdatePageData() { // 计算总页数 int totalRecords = AlarmManager::getInstance().getTotalAlarmCount("", "", ""); m_nTotalPages = (totalRecords + PAGE_SIZE - 1) / PAGE_SIZE; std::vector<std::vector<std::string>> vecData; // 根据时间过滤条件加载数据 if (m_nDateTimeFlag == 0) { vecData = AlarmManager::getInstance().getAlarms((m_nCurPage - 1) * PAGE_SIZE, PAGE_SIZE); } else { COleDateTime startTime, endTime; m_dateTimeStart.GetTime(startTime); m_dateTimeEnd.GetTime(endTime); CString strStartTime = startTime.Format(_T("%Y-%m-%d %H:%M:%S")); CString strEndTime = endTime.Format(_T("%Y-%m-%d %H:%M:%S")); std::string start = CT2A(strStartTime); std::string end = CT2A(strEndTime); vecData = AlarmManager::getInstance().getFilteredAlarms("", start, end, m_nCurPage, PAGE_SIZE); } if (vecData.empty()) return; // 填充数据到控件 CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST_ALARM); FillDataToListCtrl(pListCtrl, vecData); // 更新分页控件(页数和按钮) UpdatePageControls(); } void CPageAlarm::UpdatePageControls() { // 更新分页信息 CString strPage; strPage.Format(_T("第 %d 页"), m_nCurPage); SetDlgItemText(IDC_LABEL_PAGE_NUMBER, strPage); // 启用/禁用翻页按钮 GetDlgItem(IDC_BUTTON_PREV_PAGE)->EnableWindow(m_nCurPage > 1); GetDlgItem(IDC_BUTTON_NEXT_PAGE)->EnableWindow(m_nCurPage < m_nTotalPages); } void CPageAlarm::FillDataToListCtrl(CListCtrl* pListCtrl, const std::vector<std::vector<std::string>>& vecData) { // 清空当前CListCtrl中的所有项 for (int i = 0; i < pListCtrl->GetItemCount(); i++) { CAlarm* pAlarm = (CAlarm*)pListCtrl->GetItemData(i); if (pAlarm != nullptr) { pAlarm->release(); } } pListCtrl->DeleteAllItems(); // 遍历数据并插入到CListCtrl中 for (const auto& item : vecData) { int nItem = pListCtrl->InsertItem(pListCtrl->GetItemCount(), _T("")); // 插入新行 pListCtrl->SetItemText(nItem, 1, item[0].c_str()); // 设置第一列的文本 pListCtrl->SetItemText(nItem, 2, item[1].c_str()); // 设置第二列的文本 pListCtrl->SetItemText(nItem, 3, item[2].c_str()); // 设置第三列的文本 pListCtrl->SetItemText(nItem, 4, item[3].c_str()); // 设置第四列的文本 } } BOOL CPageAlarm::DestroyWindow() { CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST_ALARM); @@ -225,3 +290,17 @@ return CDialogEx::DestroyWindow(); } void CPageAlarm::OnBnClickedButtonPrevPage() { // 点击上一页 m_nCurPage--; UpdatePageData(); // 调用分页更新函数 } void CPageAlarm::OnBnClickedButtonNextPage() { // 点击下一页 m_nCurPage++; UpdatePageData(); // 调用分页更新函数 } SourceCode/Bond/BondEq/CPageAlarm.h
@@ -18,11 +18,24 @@ void LoadAlarms(); void AddAlarm(CAlarmMonitor* pMonitor, CAlarm* pAlarm); void UpdateAlarm(CAlarmMonitor* pMonitor, CAlarm* pAlarm); void UpdatePageData(); void UpdatePageControls(); void FillDataToListCtrl(CListCtrl* pListCtrl, const std::vector<std::vector<std::string>>& vecData); private: COLORREF m_crBkgnd; HBRUSH m_hbrBkgnd; IObserver* m_pObserver; // 页码 int m_nCurPage; int m_nTotalPages; // 日期时间标志 int m_nDateTimeFlag; // 控件 CDateTimeCtrl m_dateTimeStart; CDateTimeCtrl m_dateTimeEnd; // 对话框数据 @@ -40,4 +53,6 @@ afx_msg void OnDestroy(); afx_msg void OnSize(UINT nType, int cx, int cy); virtual BOOL DestroyWindow(); afx_msg void OnBnClickedButtonPrevPage(); afx_msg void OnBnClickedButtonNextPage(); };