2012-05-01 183 views
1

在我的WTL应用程序中我试图更改静态标签的字体。但是CreatePointFont返回NULL。为什么会这样呢?为什么CreatePointFont()会为我返回NULL?

CFont font; 

font.CreatePointFont(120, _T("Segoe UI")); 
text.Attach(GetDlgItem(IDC_MAINTEXT)); 
text.SetFont(font); 
+0

获得了您正在使用的CreatePointFont变体的MSDN页面的链接?我发现只有三个参数,第三个是DC。你是否通过了适当的DC? –

回答

1

你肯定CreatePointFont被返回NULL?

对于要设置的字体,它必须保留在内存中,而从代码片段看来,变量font在设置后会被直接销毁。

text对象的生命周期内声明变量的某个地方不会被删除,例如在使用MFC对象的类中。

+0

这是罪魁祸首。一旦我的OnInitDialog完成,'font'变量就被销毁了。 – user555

+0

“对于要设置的字体,它必须留在记忆中”欢呼安德鲁,你刚刚度过了我的一天! :) – fduff

1

的nPointSize参数CreatePointFont()是在一个点的十分之一,也许你的12/10 = 1.2个百分点,规模太小。你可能打算通过120

在一个较轻的笔记上,如果您将其用于商业应用程序,您可能还想访问ban comic sans网站。

+0

你的权利的大小是错误的,但它仍然会返回NULL。至于漫画Sans,我只是拿了我的任何字体。我同意不应该使用漫画sans。 – user555

+0

也许它与AtlGetControlFont()也返回NULL的事实有关? – user555

1

该文档是不是太详细的失败的情况,但我的猜测是,你不必

检查,如果它是由EnumFontFamilies功能列出的机器上名字的字体(报价形成documentation):

在Windows EnumFontFamilies函数可用于枚举所有当前可用字体

+0

我尝试过所有安装的字体,从Comic Sans到Arial。 – user555