65.9K
CodeProject 正在变化。 阅读更多。
Home

WTL 调光编辑控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.20/5 (3投票s)

2001年9月1日

3分钟阅读

viewsIcon

77950

downloadIcon

1219

James Twine 的 Dim Edit 控件的 WTL 适配。

引言

由于我正在开发一个带有属性页的应用程序,我意识到 James Twine 的 Dim Edit 控件 非常适合呈现一些信息。然而,他的控件是用 MFC 编写的,而我使用的是 WTL。因此,我的 WTL Dim Edit 控件诞生了!

我特意没有加入 James 控件中的那么多功能,因为我试图保持我的属性页背后的代码尽可能轻量级。但是,我希望对“暗淡文本”字符串的存储位置和显示方式更灵活。我最终得到的是 WTL 和 STL 的混合。

实现

暗淡文本字符串使用 STL std::basic_string < TCHAR >, 存储,这允许该控件被编译为 ANSI 或 Unicode 使用。 此外,这样做不会对暗淡文本的长度施加任意限制。 接下来,请注意暗淡文本实际上并未存储为“窗口”文本,这意味着该控件不必确保在客户端应用程序请求时存储正确的字符串。

WM_SETFOCUSWM_KILLFOCUS 的消息处理程序用于设置一个简单的布尔标志,指示是否应在控件中显示暗淡文本。 WM_PAINT 处理程序查看此标志以决定是显示暗淡文本还是控件的窗口文本。 Windows 会查询要使用的字体和颜色,因此您的用户可以使用他们喜欢的任何主题,并且该控件的行为将与普通的编辑控件完全相同。

用法

要在您的 WTL 应用程序中使用此控件,只需将一个普通的编辑控件添加到您的对话框或窗口中,然后对其进行子类化。 您的代码将类似于

#include <DimEdit.h>


class CMainDlg : public CDialogImpl< CMainDlg >
{
public:

  OnInitDialog( HWND hWnd, LPARAM lParam )
  {
    ...
    m_dimEdit.SubclassWindow( GetDlgItem( IDC_EDIT1 ) );
    m_dimEdit.SetDimText( "This is the dim text" )
             .SetDimColor( RGB( 192, 192, 192 ) );
  }
  
private:

  CDimEdit m_dimEdit;
};

注释

如果设置文本和颜色的那对行对您来说有点奇怪,那是因为我编写“get/set”函数对时,set 函数总是返回对对象本身的引用。 这允许这种函数链。 它实际上与能够编写类似的代码没有区别:a = a + a + a。 随着时间的推移,我发现以这种方式编写代码更方便。

关于 WTL 的最后一点:当您查看 DimEdit.hmaindlg.h 中的代码时,您会看到消息映射看起来不太正常。 这是因为我发现 WTL 有一个消息拆分系统,非常类似于自 Windows 3.x 时代以来就存在于 windowsx.h 头文件中的系统。 消息拆分使您不必将各种参数转换为更可用的形式。 这样做唯一的问题是事件处理程序向导基于普通 ATL 消息映射,而不是扩展的拆分版本。 您将不得不手动将消息添加到映射和处理程序代码中,但我认为这并不是一个很大的负担。

结论

希望您觉得这个控件有用! 如果您希望获得任何附加功能,请在本页底部的论坛中留言,我将考虑您的想法。

© . All rights reserved.