如何在visual c ++应用程序中更改所有对话框表单中的字体?
我想设置Tahoma风格。
感谢。
答案 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);
.
.
.
}