LAPTOP-T815PCOQ\25526
2024-11-21 07b2cefe6e0dfe8bc530aab3b58d4159502ceba8
1. 解决控件字体修改以后出现锯齿
已修改9个文件
399 ■■■■■ 文件已修改
SourceCode/Bond/BondEq/AxisSettingsDlg.cpp 178 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/AxisSettingsDlg.h 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/BondEq.rc 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/BondEqDlg.cpp 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/Resource.h 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/View/SystemLogManagerDlg.cpp 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/View/SystemLogManagerDlg.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/View/UserManagerDlg.cpp 90 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/View/UserManagerDlg.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BondEq/AxisSettingsDlg.cpp
@@ -20,11 +20,104 @@
CAxisSettingsDlg::~CAxisSettingsDlg()
{
    for (auto& pair : m_mapFonts) {
        if (pair.second) {
            pair.second->DeleteObject();
            delete pair.second;
        }
    }
    m_mapFonts.clear();
}
void CAxisSettingsDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
}
void CAxisSettingsDlg::SetDefaultFont()
{
    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; // 存储到字体管理容器
    }
    // 遍历所有控件,应用默认字体
    CWnd* pWnd = GetWindow(GW_CHILD);
    while (pWnd) {
        pWnd->SetFont(defaultFont, TRUE);
        pWnd = pWnd->GetNextWindow();
    }
}
void CAxisSettingsDlg::AdjustControls(int nWidth, int nHeight)
{
    CWnd* pWnd = GetWindow(GW_CHILD);
    while (pWnd) {
        UINT nCtrlID = pWnd->GetDlgCtrlID();
        CRect ctrlRect;
        pWnd->GetWindowRect(&ctrlRect);
        ScreenToClient(&ctrlRect);
        // 计算控件的新位置和大小,按比例调整
        int newX = (int)(ctrlRect.left * (nWidth / (float)m_nInitialWidth));
        int newY = (int)(ctrlRect.top * (nHeight / (float)m_nInitialHeight));
        int newWidth = (int)(ctrlRect.Width() * (nWidth / (float)m_nInitialWidth));
        int newHeight = (int)(ctrlRect.Height() * (nHeight / (float)m_nInitialHeight));
        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 表示所有项的高度
        }
        pWnd->MoveWindow(newX, newY, newWidth, newHeight);
        AdjustControlFont(pWnd, newWidth, newHeight);
        // 获取下一个控件
        pWnd = pWnd->GetNextWindow();
    }
}
void CAxisSettingsDlg::AdjustControlFont(CWnd* pWnd, int nWidth, int nHeight)
{
    // 根据控件高度动态调整字体大小
    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);
        // 存储到字体管理容器中
        m_mapFonts[fontSize] = newFont;
        it = m_mapFonts.find(fontSize);
    }
    pWnd->SetFont(it->second);
    pWnd->Invalidate(); // 刷新控件显示
}
@@ -61,15 +154,29 @@
    // TODO:  在此添加额外的初始化
    //ModifyStyle(0, WS_THICKFRAME | WS_SIZEBOX);
    CRect rect;
    GetClientRect(&rect);
    m_nInitialWidth = rect.Width();
    m_nInitialHeight = rect.Height();
    // 设置默认字体
    SetDefaultFont();
    rect.right *= 1.5;
    rect.bottom *= 1.5;
    // 调整对话框大小
    MoveWindow(rect);
    CRect screenRect, dlgRect, clientRect;
    GetClientRect(&clientRect);
    m_nInitialWidth = clientRect.Width();
    m_nInitialHeight = clientRect.Height();
    GetWindowRect(&dlgRect);
    int dlgWidth = dlgRect.Width() * 2;
    int dlgHeight = dlgRect.Height() * 2;
    SystemParametersInfo(SPI_GETWORKAREA, 0, &screenRect, 0);
    if (dlgWidth > screenRect.Width()) {
        dlgWidth = screenRect.Width();
    }
    if (dlgHeight > screenRect.Height()) {
        dlgHeight = screenRect.Height();
    }
    int centerX = screenRect.left + (screenRect.Width() - dlgWidth) / 2;
    int centerY = screenRect.top + (screenRect.Height() - dlgHeight) / 2;
    MoveWindow(centerX, centerY, dlgWidth, dlgHeight);
    return TRUE;  // return TRUE unless you set the focus to a control
    // 异常: OCX 属性页应返回 FALSE
@@ -189,57 +296,4 @@
void CAxisSettingsDlg::OnBnClickedButtonAxisTestStop()
{
    // TODO: 在此添加控件通知处理程序代码
}
void CAxisSettingsDlg::AdjustControls(int nWidth, int nHeight)
{
    CWnd* pWnd = GetWindow(GW_CHILD);
    while (pWnd) {
        UINT nCtrlID = pWnd->GetDlgCtrlID();
        CRect ctrlRect;
        pWnd->GetWindowRect(&ctrlRect);
        ScreenToClient(&ctrlRect);
        // 计算控件的新位置和大小,按比例调整
        int newX = (int)(ctrlRect.left * (nWidth / (float)m_nInitialWidth));
        int newY = (int)(ctrlRect.top * (nHeight / (float)m_nInitialHeight));
        int newWidth = (int)(ctrlRect.Width() * (nWidth / (float)m_nInitialWidth));
        int newHeight = (int)(ctrlRect.Height() * (nHeight / (float)m_nInitialHeight));
        pWnd->MoveWindow(newX, newY, newWidth, newHeight);
        AdjustControlFont(pWnd, newWidth, newHeight);
        // 获取下一个控件
        pWnd = pWnd->GetNextWindow();
    }
}
void CAxisSettingsDlg::AdjustControlFont(CWnd* pWnd, int nWidth, int nHeight)
{
    TCHAR szClassName[256];
    GetClassName(pWnd->m_hWnd, szClassName, sizeof(szClassName));
    if (_tcsicmp(szClassName, _T("Static")) == 0) {
        CStatic* pStatic = (CStatic*)pWnd;
        pStatic->ModifyStyle(0, SS_CENTER | SS_CENTERIMAGE);
        return;
    }
    if (_tcsicmp(szClassName, _T("ComboBox")) == 0) {
        CComboBox* pComboBox = (CComboBox*)pWnd;
        pComboBox->SetItemHeight(-1, nHeight);  // -1 表示所有项的高度
    }
    int fontSize = nHeight - 10;
    CFont* pCurrentFont = pWnd->GetFont();
    LOGFONT logFont;
    pCurrentFont->GetLogFont(&logFont);
    logFont.lfHeight = -fontSize;
    CFont newFont;
    newFont.CreateFontIndirect(&logFont);
    pWnd->SetFont(&newFont);
    pWnd->Invalidate();
}
}
SourceCode/Bond/BondEq/AxisSettingsDlg.h
@@ -17,6 +17,16 @@
    enum { IDD = IDD_DIALOG_AXIS_SETTINGS };
#endif
private:
    void SetDefaultFont();
    void AdjustControls(int nWidth, int nHeight);
    void AdjustControlFont(CWnd* pWnd, int nWidth, int nHeight);
private:
    int m_nInitialWidth;
    int m_nInitialHeight;
    std::map<int, CFont*> m_mapFonts; // 管理字体的容器,键为字体大小
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
    virtual BOOL OnInitDialog();
@@ -40,12 +50,4 @@
    afx_msg void OnBnClickedButtonAxisTestJogSub();
    afx_msg void OnBnClickedButtonAxisTestStop();
    DECLARE_MESSAGE_MAP()
private:
    void AdjustControls(int nWidth, int nHeight);
    void AdjustControlFont(CWnd* pWnd, int nWidth, int nHeight);
private:
    int m_nInitialWidth;
    int m_nInitialHeight;
};
SourceCode/Bond/BondEq/BondEq.rc
Binary files differ
SourceCode/Bond/BondEq/BondEqDlg.cpp
@@ -572,10 +572,6 @@
            loginDlg.DoModal();
        }
        else if (1 == menuId) {
            // test
            CSystemLogManagerDlg dlg;
            dlg.DoModal();
            CChangePasswordDlg changePasswordDlg;
            changePasswordDlg.DoModal();
        }
@@ -586,6 +582,10 @@
            }
        }
        else if (3 == menuId) {
            CSystemLogManagerDlg dlg;
            dlg.DoModal();
        }
        else if (4 == menuId) {
            int ret = AfxMessageBox(_T("是否切换用户?切换用户会退出当前账号!"), MB_OKCANCEL | MB_ICONEXCLAMATION);
            if (ret != IDOK) {
                return 0;
@@ -692,6 +692,7 @@
    {
        ::EnableMenuItem(hMenu, ID_OPEATOR_LOGIN, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
        ::EnableMenuItem(hMenu, ID_OPERATOR_CHANGE_PASSWORD, MF_BYCOMMAND | MF_ENABLED);
        ::EnableMenuItem(hMenu, ID_OPERATOR_SYSTEM_LOG, MF_BYCOMMAND | MF_ENABLED);
        ::EnableMenuItem(hMenu, ID_OPEATOR_SWITCH, MF_BYCOMMAND | MF_ENABLED);
        ::EnableMenuItem(hMenu, ID_OPERATOR_LOGOUT, MF_BYCOMMAND | MF_ENABLED);
@@ -708,6 +709,7 @@
        ::EnableMenuItem(hMenu, ID_OPEATOR_LOGIN, MF_BYCOMMAND | MF_ENABLED);
        ::EnableMenuItem(hMenu, ID_OPERATOR_CHANGE_PASSWORD, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
        ::EnableMenuItem(hMenu, ID_OPEATOR_USER_MANAGER, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
        ::EnableMenuItem(hMenu, ID_OPERATOR_SYSTEM_LOG, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
        ::EnableMenuItem(hMenu, ID_OPEATOR_SWITCH, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
        ::EnableMenuItem(hMenu, ID_OPERATOR_LOGOUT, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
SourceCode/Bond/BondEq/Resource.h
Binary files differ
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();
    LOGFONT logFont = { 0 };
    CFont* defaultFont = nullptr;
    // 设置字体属性
    _tcscpy_s(logFont.lfFaceName, _T("Segoe UI")); // 使用清晰字体
    logFont.lfHeight = -12; // 字体高度
    logFont.lfWeight = FW_NORMAL;
    logFont.lfQuality = CLEARTYPE_QUALITY; // 启用 ClearType 抗锯齿
    // 如果字体管理容器中有默认大小(如 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; // 存储到字体管理容器
    }
    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);
    logFont.lfHeight = -fontSize;
    // 根据控件高度动态调整字体大小
    int fontSize = nHeight / 2;
    if (fontSize < 8) fontSize = 8;
    CFont newFont;
    newFont.CreateFontIndirect(&logFont);
    // 检查字体是否已经存在
    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);
    pWnd->SetFont(&newFont);
    pWnd->Invalidate();
        // 存储到字体管理容器中
        m_mapFonts[fontSize] = newFont;
        it = m_mapFonts.find(fontSize);
    }
    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();
}
SourceCode/Bond/BondEq/View/SystemLogManagerDlg.h
@@ -2,7 +2,6 @@
#include "afxdialogex.h"
#include "GridCtrl.h"
// CSystemLogManagerDlg 对话框
class CSystemLogManagerDlg : public CDialogEx
@@ -33,6 +32,7 @@
    int m_nInitialHeight;  // 初始高度
    int m_nCurrentPage;    // 当前页码
    int m_nTotalPages;     // 总页数
    std::map<int, CFont*> m_mapFonts; // 管理字体的容器,键为字体大小
private:
    CComboBox m_comboType;
SourceCode/Bond/BondEq/View/UserManagerDlg.cpp
@@ -25,6 +25,13 @@
CUserManagerDlg::~CUserManagerDlg()
{
    for (auto& pair : m_mapFonts) {
        if (pair.second) {
            pair.second->DeleteObject();
            delete pair.second;
        }
    }
    m_mapFonts.clear();
}
void CUserManagerDlg::DoDataExchange(CDataExchange* pDX)
@@ -342,6 +349,42 @@
    return false;
}
void CUserManagerDlg::SetDefaultFont()
{
    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; // 存储到字体管理容器
    }
    // 遍历所有控件,应用默认字体
    CWnd* pWnd = GetWindow(GW_CHILD);
    while (pWnd) {
        // 跳过特殊控件(如 MFCGridCtrl)
        TCHAR szClassName[256];
        GetClassName(pWnd->m_hWnd, szClassName, sizeof(szClassName));
        if (_tcsicmp(szClassName, _T("MFCGridCtrl")) == 0) {
            pWnd = pWnd->GetNextWindow();
            continue;
        }
        pWnd->SetFont(defaultFont, TRUE);
        pWnd = pWnd->GetNextWindow();
    }
}
void CUserManagerDlg::AdjustControls(int nWidth, int nHeight)
{
    CWnd* pWnd = GetWindow(GW_CHILD);
@@ -361,10 +404,14 @@
        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;
            pGridCtrl->SetDefCellHeight(newHeight / 20);
            pGridCtrl->SetDefCellHeight(newHeight / 21);
            pGridCtrl->ExpandColumnsToFit(TRUE);
            pGridCtrl->Invalidate();
        }
@@ -382,27 +429,33 @@
    TCHAR szClassName[256];
    GetClassName(pWnd->m_hWnd, szClassName, sizeof(szClassName));
    if (_tcsicmp(szClassName, _T("Static")) == 0) {
        CStatic* pStatic = (CStatic*)pWnd;
        pStatic->ModifyStyle(0, SS_CENTER | SS_CENTERIMAGE);
        return;
    }
    // 跳过特殊控件(如 MFCGridCtrl)
    if (_tcsicmp(szClassName, _T("MFCGridCtrl")) == 0) {
        return;
    }
    int fontSize = nHeight - 10;
    CFont* pCurrentFont = pWnd->GetFont();
    LOGFONT logFont;
    pCurrentFont->GetLogFont(&logFont);
    logFont.lfHeight = -fontSize;
    // 根据控件高度动态调整字体大小
    int fontSize = nHeight / 2;
    if (fontSize < 8) fontSize = 8;
    CFont newFont;
    newFont.CreateFontIndirect(&logFont);
    // 检查字体是否已经存在
    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);
    pWnd->SetFont(&newFont);
    pWnd->Invalidate();
        // 存储到字体管理容器中
        m_mapFonts[fontSize] = newFont;
        it = m_mapFonts.find(fontSize);
    }
    pWnd->SetFont(it->second);
    pWnd->Invalidate(); // 刷新控件显示
}
BEGIN_MESSAGE_MAP(CUserManagerDlg, CDialogEx)
@@ -427,6 +480,9 @@
    SetWindowText(_T("用户管理"));
    SystemParametersInfo(SPI_GETWORKAREA, 0, &screenRect, 0);
    // 设置默认字体
    SetDefaultFont();
    GetClientRect(&clientRect);
    m_nInitialWidth = clientRect.Width();
    m_nInitialHeight = clientRect.Height();
@@ -436,7 +492,7 @@
    int dlgHeight = dlgRect.Height() * 3;
    if (dlgWidth > screenRect.Width()) {
        dlgWidth = screenRect.Width();
        dlgWidth = screenRect.Width();
    }
    if (dlgHeight > screenRect.Height()) {
        dlgHeight = screenRect.Height();
SourceCode/Bond/BondEq/View/UserManagerDlg.h
@@ -23,12 +23,14 @@
    void AddRow(CGridCtrl* pGridCtrl);
    void DeleteSelectedRow(CGridCtrl* pGridCtrl);
    bool IsUsernameDuplicate(const CString& username);
    void SetDefaultFont();
    void AdjustControls(int nWidth, int nHeight);
    void AdjustControlFont(CWnd* pWnd, int nWidth, int nHeight);
private:
    int m_nInitialWidth;
    int m_nInitialHeight;
    std::map<int, CFont*> m_mapFonts;
    std::map<CString, CString> m_mapRoleDescriptions;
private: