更改visual c ++应用程序字体

时间:2012-05-15 18:23:50

标签: visual-c++ fonts gdi

如何在visual c ++应用程序中更改所有对话框表单中的字体?

我想设置Tahoma风格。

感谢。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

替换应用程序的每个对话框中的字体将是相当繁琐的工作。 您可以使用MFC为您完成。 检查应用的InitInstance。看看AfxEnableControlContainer(); 即使将AfxEnableControlContainer声明为

,它也被称为woithout任何参数
void AFX_CDECL AfxEnableControlContainer(COccManager* pOccManager=NULL);

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

无论如何,使用默认的occ实现,使用自己并更改它来更改字体。 从COccManager派生类。在这个示例中,我称之为CDlgOccManager。覆盖虚拟PreCreateDialog:

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());
}

现在你是所有对话框的changin字体。记得改变AfxEnableControlContainer调用:

PROCESS_LOCAL(CDlgOccManager, pManager);

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

不要忘记

#include "DlgOccManager.h"

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

答案 2 :(得分:0)

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

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