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,但我想为应用程序设置默认字体。突然,我必须在这个项目中使用自定义控件。