所有者绘制的 WTL 控件






4.56/5 (7投票s)
此演示包中的代码包含一个彩色标签、一个带有菜单支持的彩色按钮,以及一个用于WTL的彩色选项卡控件。
引言
提交的代码包含3个主要的所有者绘制控件,它们与WTL一起工作。 此外,还有一个可以嵌入到对话框中的属性表的示例,以及一个插件类,可以轻松地将工具提示添加到对话框中的所有控件。 它们都非常简单易用,演示程序详细介绍了如何使用它们。
文本按钮类
有一个文本按钮类,允许您指定自定义颜色并附加菜单。 当您附加菜单时,会在其末尾绘制一个小箭头。
请确保在任何所有者消息映射中包含REFLECT_NOTIFICATIONS
,否则按钮将无法处理正确的消息。
我对该控件的一个问题是,当它是透明时。 透明控件本质上需要所有者绘制其背后的背景。 我还没有找到一种方法让父窗口执行此操作。
为了使用该按钮,您需要进行以下调用
Btn.SubclassWindow(GetDlgItem(IDC_BUTTON1)); Btn.SetColors(crText, crBack); Btn.SetBorderColors(crDark, crDkShadow, crLight); Btn.SetMenuID(IDR_BTN_MENU);
彩色标签类
有一个彩色标签类,允许标签更改前景色并以透明方式绘制它。 您还可以设置标签的字体名称和磅值,以及粗体、斜体、下划线和磅值。
为了使用该标签,您需要进行以下调用
m_Label1.SubclassWindow(GetDlgItem(IDC_TEXT_1)); m_Label1.SetBold(true, false); m_Label1.SetTextColor(crText, false); m_Label1.SetBackColor(crBack, false); m_Label1.SetText("Label 1", false);
所有者绘制选项卡控件
还有一个所有者绘制的选项卡控件,允许您为背景、选定的选项卡、未选定的选项卡和文本设置颜色。 您还可以设置字体、磅值以及是否粗体。
为了使用选项卡,您需要进行以下调用
m_Tab.SubclassWindow(GetDlgItem(IDC_TAB1));
m_Tab.SetColors(crDark, crLight, crBack, crText, true);
可以嵌入到对话框中的属性表类
这个类展示了如何在对话框中嵌入属性表。 要创建表,我将在想要嵌入它的对话框中执行以下操作
HWND hWndPlaceHolder = GetDlgItem(IDC_PROP_SHEET_HOLDER);
::ShowWindow(hWndPlaceHolder, FALSE);
CRect rc;
::GetWindowRect(hWndPlaceHolder, &rc);
ScreenToClient(&rc);
m_Sheet.Create(m_hWnd, 0, rc);
工具提示对话框
这是一个插件类,它将为对话框中的每个子窗口加载资源字符串。 加载的字符串将与子窗口的控件ID相同。 必要的调用是m_TipDlg.SetOwner(m_hWnd);
在您想要工具提示的对话框中。 然后确保字符串表添加了与子窗口的控件ID匹配的项目
需要注意的是。 静态文本控件、复选框和单选按钮必须都从对话框编辑器设置notify
样式。
我希望这些类对您有所帮助。