Visual c++ 更改visual c++;应用程序字体 如何在Visual C++应用程序中更改所有对话框窗体的字体?

Visual c++ 更改visual c++;应用程序字体 如何在Visual C++应用程序中更改所有对话框窗体的字体?,visual-c++,fonts,gdi,Visual C++,Fonts,Gdi,我想设置塔荷马风格 谢谢。您可以在创建它的资源中设置。我相信这也会改变所有标准控件的字体。如果您有自定义控件,则必须执行其他工作 请注意,如果希望字体与计算机的默认UI字体相匹配,则可以使用虚拟字体,如“MS Shell Dlg 2”,它将在XP上映射到Tahoma,在Vista+上映射到Segoe UI。在应用程序的每个对话框中替换字体将是一项相当繁琐的工作。 你可以聘请MFC为你做这件事。 检查应用程序的初始实例。看看AfxEnableControlContainer(); 调用它时不带任何

我想设置塔荷马风格

谢谢。

您可以在创建它的资源中设置。我相信这也会改变所有标准控件的字体。如果您有自定义控件,则必须执行其他工作


请注意,如果希望字体与计算机的默认UI字体相匹配,则可以使用虚拟字体,如“MS Shell Dlg 2”,它将在XP上映射到Tahoma,在Vista+上映射到Segoe UI。

在应用程序的每个对话框中替换字体将是一项相当繁琐的工作。 你可以聘请MFC为你做这件事。 检查应用程序的初始实例。看看AfxEnableControlContainer(); 调用它时不带任何参数,即使AfxEnableControlContainer声明为

void AFX_CDECL AfxEnableControlContainer(COccManager* pOccManager=NULL);
CocManager是一个非常有趣的类,在具有occ(OLE自定义控件)支持、管理OLE容器和站点类时使用。默认情况下,所有MFC应用程序都是在occ支持下创建的。如果在向导生成的代码中未看到AfxEnableControlContainer,则表示未启用occ支持

无论如何,使用own并更改它来更改字体,而不是使用默认occ实现。 从管理器派生类。在这个示例中,我称之为CDlgOccManager。覆盖虚拟预创建对话框:

virtual const DLGTEMPLATE* PreCreateDialog(_AFX_OCC_DIALOG_INFO* pOccDialogInfo,
    const DLGTEMPLATE* pOrigTemplate);
在实施过程中:

const DLGTEMPLATE* CDlgOccManager::PreCreateDialog(_AFX_OCC_DIALOG_INFO* pOccDialogInfo, const DLGTEMPLATE* pOrigTemplate)
{
    CDialogTemplate RevisedTemplate(pOrigTemplate);
    // here replace font for the template
    RevisedTemplate.SetFont(_T("Tahoma"), -16);

    return COccManager::PreCreateDialog (pOccDialogInfo, (DLGTEMPLATE*)RevisedTemplate.Detach());
}
现在您可以更改所有对话框的字体。记住更改AfxEnableControlContainer调用:

PROCESS_LOCAL(CDlgOccManager, pManager);

BOOL CDlgFontChangeApp::InitInstance()
{
    AfxEnableControlContainer(pManager.GetData());
.
.
.
}
别忘了

#include "DlgOccManager.h"

对于MFC的新版本,包括旧版本的afxdisp.h,COccManager的occimpl.h。

我刚刚注意到一些东西。这不是一个错误,但需要一个解释。 我已经将这段代码保存在我的存储库中很长很长时间了。 当时dll将所有数据保持为全局数据,使加载此dll的所有模块都可以使用数据。为了强制将数据存储在TLS区域中,我使用了PROCESS_LOCAL宏,该宏扩展为调用仍处于活动状态的CProcessLocal类。 您可以删除此宏并将其替换为:

BOOL CDlgFontChangeApp::InitInstance()
{
    CDlgOccManager* pManager = new CDlgOccManager();
    AfxEnableControlContainer(pManager);
.
.
.
}

谢谢Adrian,但我想为应用程序设置默认字体。突然,我必须在这个项目中使用自定义控件。