按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
为按钮IDC_CHANGEFONT的BN_CLICKED事件编写下面的处理函数:
void CButtonFontDlg::OnChangefont()
{
// 获取按钮 IDC_LOVE 的当前所用字体
LOGFONT lf;
GetDlgItem(IDC_LOVE)…》GetFont()…》GetLogFont(&lf);
// 使用按钮的当前字体初始化字体对话框
CFontDialog dlgFontDlg(&lf);
// 显示字体选择对话框
if (dlgFontDlg。DoModal()==IDOK)
{
// 如果用户在字体选择对话框中单击了 “确定”按钮,
// 则使用
dlgFontDlg。GetCurrentFont(&lf);
m_Font。DeleteObject();
m_Font。CreateFontIndirect(&lf);
GetDlgItem(IDC_LOVE)…》SetFont(&m_Font);
…………………………………………………………Page 341……………………………………………………………
}
}
编译并运行程序ButtonFont,单击 “改变字体”按钮,在随后弹出的
字体选择对话框中设置字体并单击 “确定”按钮。对话框的显示可能
如图6。37所示。
图6。 37 示例程序ButtonFont的运行结果
l 注意:
l 在示例程序中,如果不定义类CButtonFontDlg的成员变量
m_Font,命令处理函数OnChangefont可以应该这样编写:
l void CButtonFontDlg::OnChangefont()
l {
l // 获取按钮 IDC_LOVE 的当前所用字体
l LOGFONT lf;
l GetDlgItem(IDC_LOVE)…》GetFont()…》GetLogFont(&lf);
l
l // 使用按钮的当前字体初始化字体对话框
l CFontDialog dlgFontDlg(&lf);
l
l // 显示字体选择对话框
l if (dlgFontDlg。DoModal()==IDOK)
l {
l // 如果用户在字体选择对话框中单击了 “确定”按钮,
l // 则将按钮 IDC_LOVE 的标题文本字体设置为所选定的字体。
…………………………………………………………Page 342……………………………………………………………
l static CFont font;
l dlgFontDlg。GetCurrentFont(&lf);
l font。DeleteObject();
l font。CreateFontIndirect(&lf);
l GetDlgItem(IDC_LOVE)…》SetFont(&font);
l }
l }
按下面的方式编写命令处理函数OnChangefont不会得到正确
的结果:
l void CButtonFontDlg::OnChangefont()
l {
l 。。。
l if (dlgFontDlg。DoModal()==IDOK)
l {
l CFont font;
l dlgFontDlg。GetCurrentFont(&lf);
l font。DeleteObject();
l font。CreateFontIndirect(&lf);
l GetDlgItem(IDC_LOVE)…》SetFont(&font);
l }
l }
之所以会出现这种情况与用来设置字体的CFont变量的存活期
有关。
…………………………………………………………Page 343……………………………………………………………
第四节 静态控件
静态控件一般用来显示静态的文本、图标、位图或图元文件,它不能
用来接受用户的输入,也很少用来显示输出,而在更多的情况下用作
那些没有固定的标题文本属性的控件(如文本编辑控件、列表框等)的
标签,或者用来进行控件的分组,或者用来显示一些提示性文本。
MFC类CStatic封装了标准的Windows静态控件。下面的示例程序
StaticDemo演示了静态控件的使用。
1。 使用AppWizard创建一个基于对话框的MFC应用程序,设置其工程
名为StaticDemo。
2。 按如图6。38绘制主对话框中的控件。其中标签为 “静态控件”的
静态控件ID为IDC_STATIC。需要注意是的,由资源管理器添加的静态
控件在默认情况下其ID均为IDC_STATIC,因此,如果需要在程序中区
分和操纵各个不同的静态控件,一般情况下我们都需要更改新添加的
静态控件的ID值。这里我们将静态控件的ID值设置为
IDC_STATICDEMO。
图6。 38 示例程序StaticDemo的主对话框
以下属性和样式没有在本章前面的内容中涉及,它们可以适用于静态
控件。可以通过静态控件的Properties属性对话框的Styles选项卡进
行这些属性或样式的设置。
Align text: 决定静态文本控件中文本的横向对齐方
式。可供选择的值为Left (向左对齐)、
Center (居中对齐)和Right (向右对
齐)。默认值:Left
Center 在静态文本控件中将文本进行垂直居
Vertically: 中。类型:布尔值 默认值:假
No prefix: 不将控件文本中的 “&”符解释为助记字
…………………………………………………………Page 344……………………………………………………………
符。在默认情况下, “&”符号在显示时
会被去掉,取而代之的是紧接 “&”符之
后的字符被以加下划线的格式进行显
示。我们早在前面说过,通过双写 “&”
符可以在控件文本中显示出实际的 “&”
符,但是,对于一些特殊的场合,如使
用静态文本控件来显示文件名的时候,
将No prefix属性设置为 “真”要更方
便。
No wrap: 以左对齐的方式来显示文本,并且不进
行文本的自动回行。超出控件右边界的
文本将被裁去。需要注意的是,这时即
使使用转义字符序列〃n〃也不可以强制
控件文本进行换行。类型:布尔值 默认
值:假
Simple: 禁止设置Text Align属性和No Wrap样
式。在该属性为真的情况下,静态文本
控件中的文本不会被自动回行,也不会
被剪裁。类型:布尔值 默认值:假
Notify: 决定控件在被单击时是否通知父窗口。
类型:布尔值 默认值:假
Sunken: 使用静态文本控件看上去有下凹的感
觉。类型:布尔值 默认值:假
Border: 为文本控件创建边框。类型:布尔值 默
认值:假
4。 静态控件一般不用于输入,但是如果它的Notify属性设置为真,
则当用户单击静态控件时,静态控件将向父窗口发送通知消息。但
是,我们不可以使用前面所讲述的方法(即使用ClassWizard或从上下
文菜单中选择Events命令)来为静态控件添加消息处理函数。而要以
手动的方式来实现这一点。下面我们结合示例StaticDemo来说明如何
为静态控件添加单击事件的命令处理程序。在进行下面的步骤之前,
请确认静态控件IDC_STATICDEMO的Notify属性值为真。
在类CStaticDemoDlg的定义处添加下面的命令处理函数声明:
afx_msg void OnStaticDemo();
…………………………………………………………Page 345……………………………………………………………
最好把成员函数OnStaticDemo的声明与其它命令处理函数的声明放在
一起,但不要放到//{{AFX_MSG和//}}AFX_MSG之间。
然后,打开