为CFileDialog的控件设置字体

news/2024/7/4 3:06:35 标签: string, listview, class, user, 工作, c
cle class="tags" href="/tags/CLASS.html" title=class>class="baidu_pl">
cle_content" class="tags" href="/tags/CLASS.html" title=class>class="article_content clearfix">
content_views" class="tags" href="/tags/CLASS.html" title=class>class="htmledit_views"> color:rgb(51,51,51); font-size:14px; line-height:26px">

为对话框的控件设置字体不是什么难事࿰c;根据MSDN的介绍࿰c;设置字体最好放在对话框接收到WM_INITDIALOG的时候࿰c;所以可以在OnInitDialog中调用::EnumChildWindows(m_hWnd, ::SetChildFont, (LPARAM)m_font)枚举控件࿰c;并为每个控件发送WM_SETFONT消息。其中回调函数可以简单得定义如下:

class="tags" href="/tags/CLASS.html" title=class>class="highlighter">
    class="tags" href="/tags/CLASS.html" title=class>class="highlighter-c">
  1. BOOL CALLBACK SetChildFont(HWND hControl, LPARAM lparam)
  2. class="tags" href="/tags/CLASS.html" title=class>class="alt">{
  3.     ::SendMessage(hControl, WM_SETFONT, (WPARAM)lparam, 1);
  4. class="tags" href="/tags/CLASS.html" title=class>class="alt">    class="tags" href="/tags/CLASS.html" title=class>class="keyword">return TRUE;
  5. }

  但是当这个对话框是一个继承于CFileDialog的自定义类CMyFileDialog时࿰c;会有什么不同吗?首先你会意识到属于CFileDialog的控件都没有得到更新。通过SPY查看窗口句柄࿰c;可以快速得发现问题所在。原来࿰c;CFileDialog模板上的控件并不属于CMyFileDialog࿰c;它们都是CFileDialog的子窗口࿰c;解决方法很简单࿰c;将EnumChildWindows改为::EnumChildWindows(GetParent()->m_hWnd, ::SetChildFont, (LPARAM)m_font)。重新运行来查看效果࿰c;会发现一个有趣的现象:
c="http://hi.csdn.net/attachment/201108/24/0_1314172567QQH9.gif" alt="" />
color:rgb(51,51,51); font-size:14px; line-height:26px">

大多数控件都如我们预期改变了字体࿰c;但用于文件浏览的class="tags" href="/tags/CLASS.html" title=class>class="tags" href="/tags/LISTVIEW.html" title=listview>listview却没有。难道在执行OnInitDialog的时候࿰c;该窗口还没有创建?由于可以明确的是所有的窗口最终都将通过CreateWindowEx进行创建࿰c;故对该API进行跟踪。

1࿰c;首先在VS中填入.SRV*c:/symbol*http://msdl.microsoft.com/download/symbols为class="tags" href="/tags/USER.html" title=user>user32.dll获得调试PDB(关于如何获得和使用符号࿰c;查看这里)

2࿰c;为OnInitDialog设置函数断点并打印在输出窗口

3࿰c;添加函数断点{,,class="tags" href="/tags/USER.html" title=user>user32.dll}_CreateWindowExW@48

4࿰c;设置该断点触发时继续执行࿰c;并将CreateWindowEx:{*(void**)(@ESP+8)}打印到输出窗口中。其中ESP+8是传入CreateWindowEx的第二个参数lpClassName

通过调试࿰c;打印结果如下:

CreateWindowEx:0x771817ec class="tags" href="/tags/CLASS.html" title=class>class="tags" href="/tags/STRING.html" title=string>string L"ComboLBox"
CreateWindowEx:0x77181800 class="tags" href="/tags/CLASS.html" title=class>class="tags" href="/tags/STRING.html" title=string>string L"ComboBox"
CreateWindowEx:0x771817ec class="tags" href="/tags/CLASS.html" title=class>class="tags" href="/tags/STRING.html" title=string>string L"ComboLBox"
CreateWindowEx:0x77181824 class="tags" href="/tags/CLASS.html" title=class>class="tags" href="/tags/STRING.html" title=string>string L"Edit"
CreateWindowEx:0x771817ec class="tags" href="/tags/CLASS.html" title=class>class="tags" href="/tags/STRING.html" title=string>string L"ComboLBox"
CreateWindowEx:0x0000c038
CreateWindowEx:0x77182ad8 _c_szToolbarClass
MyFileDialog::OnInitDialog(void)
CreateWindowEx:0x75efa3e0 class="tags" href="/tags/CLASS.html" title=class>class="tags" href="/tags/STRING.html" title=string>string L"Auto-Suggest Dropdow"...
CreateWindowEx:0x75f0096c class="tags" href="/tags/CLASS.html" title=class>class="tags" href="/tags/STRING.html" title=string>string L"SysListView32"
CreateWindowEx:0x77182a58 _c_szHeaderClass
CreateWindowEx:0x77181a38 class="tags" href="/tags/CLASS.html" title=class>class="tags" href="/tags/STRING.html" title=string>string L"tooltips_class="tags" href="/tags/CLASS.html" title=class>class32"
CreateWindowEx:0x75f0093c class="tags" href="/tags/CLASS.html" title=class>class="tags" href="/tags/STRING.html" title=string>string L"ScrollBar"
CreateWindowEx:0x75f0093c class="tags" href="/tags/CLASS.html" title=class>class="tags" href="/tags/STRING.html" title=string>string L"ScrollBar"
CreateWindowEx:0x7d5a22d0 class="tags" href="/tags/CLASS.html" title=class>class="tags" href="/tags/STRING.html" title=string>string L"SHELLDLL_DefView"
CreateWindowEx:0x7d59aef8 class="tags" href="/tags/CLASS.html" title=class>class="tags" href="/tags/STRING.html" title=string>string L"SysListView32"
CreateWindowEx:0x77181a38 class="tags" href="/tags/CLASS.html" title=class>class="tags" href="/tags/STRING.html" title=string>string L"tooltips_class="tags" href="/tags/CLASS.html" title=class>class32"
CreateWindowEx:0x7d59fa64 class="tags" href="/tags/CLASS.html" title=class>class="tags" href="/tags/STRING.html" title=string>string L"tooltips_class="tags" href="/tags/CLASS.html" title=class>class32"
CreateWindowEx:0x76991b20
CreateWindowEx:0x77182ab4 _c_szSToolTipsClass
CreateWindowEx:0x77182ab4 _c_szSToolTipsClass

  结果证实了推测࿰c;作为文件浏览窗口的SHELLDLL_DefView࿰c;它的创建将在OnInitDialog执行完之后进行。尽管我们将没有办法在OnInitDialog中直接完成设置字体的class="tags" href="/tags/GongZuo.html" title=工作>工作࿰c;但代码仍然可以放置在OnInitDialog中。我们可以使用PostMessage发送自定义消息࿰c;消息的目标函数执行设置字体的class="tags" href="/tags/GongZuo.html" title=工作>工作࿰c;这样消息函数将在所有的窗体创建完毕后得以触发。关于如何处理自定义消息࿰c;这里不在详细描述。


cle>

http://www.niftyadmin.cn/n/1403559.html

相关文章

Cisco交换机端口安全

Cisco交换机端口安全通过端口设置,可以限制允许访问交换机上某个端口的MAC地址以及IP(可选)来实现严格控制对该端口的输入,最终确保网络接入安全.配置网络安全时应该注意如下问题:1.下面四种端口不能设置: a.不能是Trunk口.b.不能是SPAN口 c.不能是Ether…

关于开漏和推挽方式

漏级开路即高阻状态,适用于输入/输出,其可独立输入/输出低电平和高阻状态,若需要产生高电平,则需使用外部上拉电阻或使用如LCX245等电平转换芯片。 有些朋友,尤其是未学过此方面知识的朋友,在实际工作中将I…

禁用屏幕保护及启用屏幕保护的代码

以下是禁用屏幕保护的代码: void DisableScrSaver() { BOOL bScrActive; SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0, &bScrActive, 0); if (bScrActive) { SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, FALSE, …

SQL Server 2000数据库备份与恢复图解

SQL Server 2000数据库备份与恢复图解四个步骤:1.安装sql server 20002.数据库设置:3.建立自动备份4.还原数据库具体图片见附件本文出自 “李晨光原创技术博客” 博客,转载请与作者联系!

C中的volatile用法

volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC 在产生release版可执行码时会进行编译优化,加volatile关键字…

setCapture和releaseCapture

SetCapture函数功能:该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当…

Domino服务器SSL的配置录像

Domino服务器SSL的配置录像格式:avi, 大小:25M 时长: 6分钟 本文出自 “李晨光原创技术博客” 博客,转载请与作者联系!

在Keil4中建立基于固件库的STM32工程

初学STM32,把建立工程步骤总结一下(基于固件库:STM32F10x_StdPeriph_Lib_V3.5.0): 第一步,建立工程文件夹,在其子文件夹内拷贝并整理好相应的文件。 1.1、建立工程文件夹,将它命名为"STM3…