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

所有者绘制的 WTL 控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.56/5 (7投票s)

2001年3月13日

CPOL
viewsIcon

105297

downloadIcon

3377

此演示包中的代码包含一个彩色标签、一个带有菜单支持的彩色按钮,以及一个用于WTL的彩色选项卡控件。

  • 下载源文件 - 28 Kb
  • 下载演示项目 - 136 Kb
  • Sample Image - OwnerDrawn.gif

    引言

    提交的代码包含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样式。

    我希望这些类对您有所帮助。

    © . All rights reserved.