LAPTOP-T815PCOQ\25526
2024-11-21 07b2cefe6e0dfe8bc530aab3b58d4159502ceba8
SourceCode/Bond/BondEq/View/SystemLogManagerDlg.cpp
@@ -5,8 +5,6 @@
#include "BondEq.h"
#include "afxdialogex.h"
#include "SystemLogManagerDlg.h"
#include "UserManager.h"
#include "SystemLogManager.h"
// CSystemLogManagerDlg 对话框
@@ -21,6 +19,13 @@
CSystemLogManagerDlg::~CSystemLogManagerDlg()
{
   for (auto& pair : m_mapFonts) {
      if (pair.second) {
         pair.second->DeleteObject();
         delete pair.second;
      }
   }
   m_mapFonts.clear();
}
void CSystemLogManagerDlg::DoDataExchange(CDataExchange* pDX)
@@ -61,13 +66,13 @@
   m_listLogs.SetFixedColumnCount(nFixCols);
   // Col
   m_listLogs.SetColumnWidth(nColIdx, 20);
   m_listLogs.SetColumnWidth(nColIdx, 10);
   m_listLogs.SetItemText(nRowIdx, nColIdx++, _T("No."));
   m_listLogs.SetColumnWidth(nColIdx, 70);
   m_listLogs.SetColumnWidth(nColIdx, 10);
   m_listLogs.SetItemText(nRowIdx, nColIdx++, _T("类型"));
   m_listLogs.SetColumnWidth(nColIdx, 150);
   m_listLogs.SetColumnWidth(nColIdx, 200);
   m_listLogs.SetItemText(nRowIdx, nColIdx++, _T("事件"));
   m_listLogs.SetColumnWidth(nColIdx, 70);
   m_listLogs.SetColumnWidth(nColIdx, 30);
   m_listLogs.SetItemText(nRowIdx, nColIdx++, _T("用户"));
   m_listLogs.SetColumnWidth(nColIdx, 70);
   m_listLogs.SetItemText(nRowIdx, nColIdx++, _T("时间"));
@@ -164,29 +169,36 @@
void CSystemLogManagerDlg::SetDefaultFont()
{
   CFont* pFont = new CFont();
   CFont* defaultFont = nullptr;
   // 如果字体管理容器中有默认大小(如 12)的字体,直接使用
   auto it = m_mapFonts.find(12);
   if (it != m_mapFonts.end()) {
      defaultFont = it->second;
   }
   else {
      // 创建默认字体
      defaultFont = new CFont();
   LOGFONT logFont = { 0 };
      _tcscpy_s(logFont.lfFaceName, _T("Segoe UI"));
      logFont.lfHeight = -12;
      logFont.lfQuality = CLEARTYPE_QUALITY;
      defaultFont->CreateFontIndirect(&logFont);
      m_mapFonts[12] = defaultFont; // 存储到字体管理容器
   }
   // 设置字体属性
   _tcscpy_s(logFont.lfFaceName, _T("Segoe UI")); // 使用清晰字体
   logFont.lfHeight = -12; // 字体高度
   logFont.lfWeight = FW_NORMAL;
   logFont.lfQuality = CLEARTYPE_QUALITY; // 启用 ClearType 抗锯齿
   pFont->CreateFontIndirect(&logFont);
   // 遍历所有控件,应用字体
   // 遍历所有控件,应用默认字体
   CWnd* pWnd = GetWindow(GW_CHILD);
   while (pWnd) {
      // 跳过特殊控件(如 MFCGridCtrl)
      TCHAR szClassName[256];
      GetClassName(pWnd->m_hWnd, szClassName, sizeof(szClassName));
      if (_tcsicmp(szClassName, _T("MFCGridCtrl")) == 0
         || _tcsicmp(szClassName, _T("ComboBoxs")) == 0) {
      if (_tcsicmp(szClassName, _T("MFCGridCtrl")) == 0) {
         pWnd = pWnd->GetNextWindow();
         continue;
      }
      pWnd->SetFont(pFont, TRUE);
      pWnd->SetFont(defaultFont, TRUE);
      pWnd = pWnd->GetNextWindow();
   }
}
@@ -210,6 +222,10 @@
      TCHAR szClassName[256];
      GetClassName(pWnd->m_hWnd, szClassName, sizeof(szClassName));
      if (_tcsicmp(szClassName, _T("ComboBox")) == 0) {
         CComboBox* pComboBox = (CComboBox*)pWnd;
         pComboBox->SetItemHeight(-1, nHeight);  // -1 表示所有项的高度
      }
      if (_tcsicmp(szClassName, _T("MFCGridCtrl")) == 0) {
         CGridCtrl* pGridCtrl = (CGridCtrl*)pWnd;
@@ -231,32 +247,33 @@
   TCHAR szClassName[256];
   GetClassName(pWnd->m_hWnd, szClassName, sizeof(szClassName));
   if (_tcsicmp(szClassName, _T("Static")) == 0) {
      CStatic* pStatic = (CStatic*)pWnd;
      pStatic->ModifyStyle(SS_CENTER | SS_RIGHT | SS_CENTERIMAGE, SS_LEFT | SS_CENTERIMAGE);
      return;
   }
   if (_tcsicmp(szClassName, _T("ComboBox")) == 0) {
      CComboBox* pComboBox = (CComboBox*)pWnd;
      pComboBox->SetItemHeight(-1, nHeight);  // -1 表示所有项的高度
   }
   // 跳过特殊控件(如 MFCGridCtrl)
   if (_tcsicmp(szClassName, _T("MFCGridCtrl")) == 0) {
      return;
   }
   int fontSize = nHeight - 10;
   CFont* pCurrentFont = pWnd->GetFont();
   LOGFONT logFont;
   pCurrentFont->GetLogFont(&logFont);
   // 根据控件高度动态调整字体大小
   int fontSize = nHeight / 2;
   if (fontSize < 8) fontSize = 8;
   // 检查字体是否已经存在
   auto it = m_mapFonts.find(fontSize);
   if (it == m_mapFonts.end()) {
      // 动态创建新字体
      CFont* newFont = new CFont();
      LOGFONT logFont = { 0 };
      _tcscpy_s(logFont.lfFaceName, _T("Segoe UI"));
   logFont.lfHeight = -fontSize;
      logFont.lfQuality = CLEARTYPE_QUALITY; // 启用 ClearType 抗锯齿
      newFont->CreateFontIndirect(&logFont);
   CFont newFont;
   newFont.CreateFontIndirect(&logFont);
      // 存储到字体管理容器中
      m_mapFonts[fontSize] = newFont;
      it = m_mapFonts.find(fontSize);
   }
   pWnd->SetFont(&newFont);
   pWnd->Invalidate();
   pWnd->SetFont(it->second);
   pWnd->Invalidate(); // 刷新控件显示
}
@@ -297,6 +314,9 @@
   // TODO:  在此添加额外的初始化
   SetWindowText(_T("系统运行日志"));
   // 设置默认字体
   SetDefaultFont();
   m_nCurrentPage = 1;  // 从第一页开始
   m_nTotalPages = 1;   // 默认总页数为 1
@@ -360,7 +380,6 @@
   // 遍历对话框中的所有控件
   AdjustControls(rect.Width(), rect.Height());
   //SetDefaultFont();
}