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

CImageTextButton

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.44/5 (19投票s)

2004年5月23日

3分钟阅读

viewsIcon

118683

downloadIcon

3624

在位图按钮上嵌入文本。

Sample Image - CImageTextButton.jpg

引言

大家好... 您是否正在寻找一个特殊的按钮?那就拿走它吧 :-)。 我只是在开玩笑.. 现在,回到正题,上传这篇文章的灵感是,因为我没有从网上得到合适的解决方案来在位图按钮的指定位置显示“文本”。我想您已经明白了问题所在?是的,我想显示一些必须为其up、down和disabled状态加载一些位图的按钮..并且还想在上面显示一些文本....请记住,有CBitmapButton,但它只能加载位图,不能在上面显示文本。因此,我决定编写一个可重用的类,如果位图被赋予该类,则可以进行位图加载,还可以提供一些方法来为按钮提供所需的文本。然后出现了着色问题..谁将对文本进行着色,文本的字体以哪种颜色显示等。因此,我决定提供支持这些点的方法..现在,我..不,您有一个很棒的简单的工作代码,可以很容易地合并到您的工作区中。

功能。

  • 可以加载位图(up、down、disabled 状态;只有 up 状态位图是强制性的,其他是可选的)。
  • 文本位置可以通过两种不同的方式设置(可以指定 x,y 位置或像 DT_CENTER|DT_VCENTER 等)。
  • 可以为每个按钮配置文本字体和字体大小。
  • 可以配置 up、down 和 disabled 状态的文本颜色。
  • 按钮大小将调整为位图的大小。

现在,来看看 CImageTextButton 吧?

class CImageTextButton : public CButton
{
 void SetTextPosition(UINT uiPos );
 void SetTextPosition(int nXPos ,int nYPos);
 void SetTextColor(const COLORREF& clrUpDwn, const COLORREF& clrDisabled );
 void SetButtonText(const CString& strCaption);
 void SetButtonImg(UINT uiImageIDU,UINT uiImgIDD =0,UINT uiImgIDX = 0);
 void SetFont(CString srtFntName_i, int nSize_i);
}

函数用法。

  • void SetButtonImg(UINT uiImageIDU,UINT uiImgIDD =0,UINT uiImgIDX = 0);

    用于设置要为按钮加载的位图的方法。位图的顺序是 up-state 位图,然后是 down-state 位图,最后一个是 disabled 位图。

  • void SetButtonText(const CString& strCaption);

    用于设置按钮的标题/文本的方法,如果按钮想要有任何文本。如果未调用此方法,则仅加载位图。

  • void SetTextColor(const COLORREF& clrUpDwn, const COLORREF& clrDisabled );

    用于设置按钮标题颜色(针对按钮的 up、down 和 disabled 状态)的方法。仅当调用 SetButtonText() 时才有效。

  • void SetTextPosition(UINT uiPos );

    用于设置文本位置的方法。有效的单位值为..

    DT_TOP          0x00000000
    DT_LEFT         0x00000000
    DT_CENTER       0x00000001
    DT_RIGHT        0x00000002 
    DT_VCENTER      0x00000004 
    DT_BOTTOM       0x00000008 
    DT_WORDBREAK    0x00000010 
    DT_SINGLELINE   0x00000020

    可以使用上述标志的任意组合。

  • void SetTextPosition(int nXPos ,int nYPos);

    用于设置文本的 x,y 位置的方法。如果未调用任何一个 SetTextPostion(),则文本将显示为 DT_SINGLELINE|DT_CENTER|DT_VCENTER

  • void SetFont(CString srtFntName_i, int nSize_i);

    用于设置文本的字体名称和字体大小的方法。如果未调用,则采用默认字体和默认大小来绘制文本。

使用该类的步骤。

  • ImageTextButton.h & ImageTextButton.cpp 文件添加到工作区。
  • 在要使用 CImageTextButton 的对话框的 include 部分添加 #include "ImageTextButton.h",如下所示
        #include "stdafx.h"
        #include "ImageTextButton.h"
  • CImageTextButton 对象声明为对应于每个按钮的
        //Adding member variables corresponding to each button
        CImageTextButton m_btnOK;
        CImageTextButton m_btnPlay;
        CImageTextButton m_btnEnable;
        CImageTextButton m_btnStrt;
  • 在 Dialog 的 OnInitDialog() 中设置按钮所需的属性,如下所示
        m_btnOK.SetButtonImg(IDB_OKU,IDB_OKD);
        m_btnOK.SetButtonText("OK");
        m_btnOK.SetFont("Arial",16);
        m_btnOK.SetTextColor(RGB(255,0,0),RGB(129,129,129));
        m_btnOK.SubclassDlgItem(IDOK,this);
        

重要

不要忘记为所有位图按钮成员调用 SubclassDlgItem(),只有在此调用之后,Windows 消息才会到达我玩了技巧的 CImageTextButton....

现在,是构建应用程序并享受结果的时候了。

[如果你们中的任何一个人发现使用此方法存在任何问题,请发邮件给我...]

© . All rights reserved.