I’m using the wizard to load some static strings into a CComboBox.
When I run the app the strings aren’t visible.
Here’s what the link below says:
Initializing a Combo-Box
The ResourceView in VC++’s DevStudio allows entries in a combobox to be
added to the resource template at design time. When you add a combobox, and
bring up its properties page, then the “Data” tab is used to add entries.
When you run an MFC app and display dialogs with combo-boxes who have had
such entries defined, they are displayed with the combo-boxes populated as
expected. With WTL, the combo-boxes get displayed, but are empty. What is
happening?
Information about the combobox (such as its control id and location on the
dialog, but excluding its data entries) is stored as part of a resource, of
type DIALOG, in the resource file. The Win32 dialog APIs understand this and
load it directly before rendering the dialog. The information about the
entries in a combobox is stored as a separate resource, of type DLGINIT. The
Win32 dialog APIs do not understand DLGINIT. Other code in higher-level
libraries or the application itself has to process DLGINIT resources.
MFC provides functionality as part of its dialog classes to cater for
DLGINIT. WTL does not. The Clipcode Reuse Library contains a WTL-friendly
function called RUiDlgInit, which loads the DLGINIT data. It is modeled on
the equivalent MFC functionality.
RUiDlgInit(IDD, m_hWnd);
阅读全文…
WTL
DLGINIT, WTL
现在有一个MFC写的自定义ComboBox打算移植到WTL上,于是根据WTL的书写方法修改了程序,就得到下面的代码:
阅读全文…
WTL
ComboBox, WTL
使用 windows 的标准控件 combobox 的时候, 遭遇到可能是这个控件的 bug 的一个问题.
就是当我们往标准 ComboBox 控件里面添加完几行字符串后, 我们点下拉列表时, 出来的 listbox 的背景没有被正确绘制, 是黑的. 如下图:

经过 Google 没找到答案, 后来试着添加了 WM_CTLCOLORLISTBOX 消息处理例程, 问题解决了. 奇怪.
阅读全文…
WTL, 技术心得
ComboBox, WTL
使用相当简单:
- 在工程内创建一个资源 ID 为 IDB_BK_LOG 的位图
- 在 mdi 的主框架窗口类内部创建变量.
CMdiClientDraw m_wndMdiClinetX;
- 然后在 OnCreate 函数内子类化 MDI Client.
m_wndMdiClinetX.SubclassWindow(m_hWndMDIClient);
完成.
以下是类的源码
阅读全文…
WTL, 技术心得
Client, drawing, MDI, WTL
终于解决 MDI 程序的子窗口, 在新创建时窗口时, 不激活这个新的子窗口. 技术细节是, 在 WTL 的 “atlframe.h” 文件的 CMDIChildWindowImpl 类的成员函数 Create 内:
阅读全文…
WTL, 技术心得, 日常琐碎
CMDIChildWindowImpl, MDI, WTL
今天将 codeproject 上的一个 MFC 实现的菜单按钮移植到 WTL 下. 测试后发现工作很好.
现在将其用法简述如下.
- 用 VC 的 WTL wizard 创建一个对话框程序, 然后将头文件 atlmenubtn.h 包含到 stdafx.h 文件内.
- 在主界面的对话框资源内添加一个按钮,
- 在 CMainDlg 类是消息循环添加 REFLECT_NOTIFICATIONS() 宏, 这个相当重要, 不然按钮将不会被显示出来.
- 在 CMainDlg 类添加 CMenuButton m_btn; 成员变量, 然后就可以用 m_btn 变量子类化刚才添加的按钮, 使用 SubclassWindow 函数; 或者创建一个, 使用 Create 函数.
- 然后就可以添加菜单项了, 响应菜单命令的消息. 等等等等. 具体细节请看代码.
源代码下载链接
阅读全文…
WTL
CMenuButton, WTL
链接:上一部分
第十部分 – 实现一个拖放源
内容
简介
拖放是许多流行应用的特性之一。尽管实现一个放下目标相当简单,但拖动源却要复杂的多。MFC 中有两个类 COleDataObject 和 COleDropSource 可以帮助管理拖动源所必须提供的数据,但 WTL 中没有这种辅助类。对于我们这些 WTL 用户来说,幸运的是,Raymond Chen 在 2000 年的时候在 MSDN 上写过一篇文章(“The Shell Drag/Drop Helper Object Part 2”),其中有 IDataObject 的纯 C++ 实现,这对于为 WTL 应用编制一个完整的拖放源提供了巨大的帮助。
阅读全文…
|
MFC 程序员的 WTL 教程, WTL
IDataObject, IDropSource, MRU, WTL, 拖放源
链接:上一部分;下一部分
第九部分 – GDI 类,公用对话框以及工具类
内容
- 简介
- GDI 封装类
- 封装类里的公用函数
- 使用 CDCT
- 与 MFC 封装类的差异
- 资源加载函数
- 使用公用对话框
- CFileDialog
- CFolderDialog
- 其他有用的类和全局函数
- Struct 的封装
- 处理双类型参数的类
- 其他工具类
- 全局函数
- 宏
- 示例工程
- 版权和许可
- 修订历史
简介
WTL 里包含了好多封装类和工具类,而直到现在也还没有在本系列里进行过全面的介绍,比如说 CString 和 CDC。WTL 具有一个封装 GDI 对象的良好体系,一些用以加载资源的便利函数,以及更便于使用某些 Win32 公用对话框的类。在此第九部分里,我将介绍一些使用最广泛的类。
阅读全文…
|
MFC 程序员的 WTL 教程, WTL
CFileDialog, CFolderDialog, GDI 类, WTL, 公用对话框, 工具类
链接:上一部分;下一部分
第八部分 – 属性表和向导
|
内容
- 简介
- WTL 属性表类
- WTL 属性页类
- CPropertyPageWindow 的方法
- CPropertyPageImpl 的方法
- 处理通知消息
- 创建一个属性表
- 永远最简单的属性表
- 创建一个有用的属性页
- 创建一个更好的属性表类
- 创建一个向导
- 其他的 UI 考虑
- 下一步
- 修订历史
简介
甚至于在 Windows 95 把属性表引入为公用控件之前,它就已经成为了呈现选项的一种颇为流行的方法了。向导通常用于指导用户通历软件的安装过程或者其他的复杂工作。WTL 对创建这两种类型的属性表都提供了良好的支持,并允许你使用前 面介绍过的所有的那些对话框相关的特性,比如说 DDX 和 DDV。在本章里,我会演示创建一个基本的属性表和向导,以及如何处理由表发送出的事件和通知消息。
阅读全文…
|
MFC 程序员的 WTL 教程, WTL
WTL, 向导, 属性表
近期评论