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

CUniButton - Pocket PC 通用按钮

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (4投票s)

2005年12月25日

CPOL

3分钟阅读

viewsIcon

51130

downloadIcon

790

一个C++中的自绘按钮类。

引言

我尝试寻找一个现成的按钮类,它可以与Pocket PC一起工作,并且看起来比微软提供的那些沉闷的按钮更好。我本以为很容易找到一个。但事实并非如此。我能找到的最好的代码仍然需要大量的修改才能满足我的期望。

目标是……嗯,让我们看看功能列表。

特点

  • 自绘按钮类。
  • 完全透明选项。
  • 支持向上和向下按钮的透明位图。
  • 按钮顶部上的纯文本或 3D 文本。
  • 按钮关联的 WAV 文件。

这些是允许您制作简单且看起来/表现专业的按钮的基本要求。

使用代码

  • UniButton.cppUniButton.h添加到项目中。
  • #include "UniButton.h"添加到xxxxxxDlg.h文件或任何需要的地方。
  • 向资源添加一个背景位图,并将成员变量m_hBmpBkgnd作为位图的句柄。加载位图并将结果分配给OnInitDialog()中的句柄。该成员变量值稍后将传递给UniButton类。在OnPaint()中绘制背景。
  • 根据需要将按钮添加到对话框资源。对于每个按钮,使用类向导添加CButton类型的成员变量。在xxxxxDlg.h文件中,将CButton类型替换为CUniButton。在资源编辑器中,选中“自绘”属性。
  • 将所需的位图添加到资源中。例如,IDB_BITMAP_BTNUPIDB_BITMAP_BTNDOWN
  • 所有按钮配置都在OnInitDialog()中使用CUniButton类的公共成员函数完成。这是将位图句柄m_hBmpBkgnd传递给CUniButton的地方。这样做的原因是最大限度地减少由于背景的多个副本而导致的内存使用。

公共方法

所有这些方法都是不言自明的。下面列出了一些

void    SetTransparent(BOOL Enable = FALSE);
void    SetTextColor(COLORREF TextColor = RGB(0,0,0));
BOOL    FontStyle(CString sFont = "MS Sans Serif", 
                  int iHeight = 10, int iWidth = 6,
                  BOOL bFont3D = FALSE, BOOL bConcave = FALSE);

void    HideText(BOOL bHide = TRUE);
void    SetBtnDownImg(int bmpID);        //Assign bitmap ID from resources
void    SetBtnUpImg(int bmpID);          //Assign bitmap ID from resources
BOOL    LoadWAV(CString fileName, BOOL loadMEM);
BOOL    WavIsSupported(void);
BOOL    WAVLoaded(void);
void    SetBkgndHandle(HBITMAP hBitmap); //Pass a background bitmap
void    SetTopEdgeColor(COLORREF TopEdge = RGB(50,50,50));
void    SetLeftEdgeColor(COLORREF LeftEdge = RGB(70,70,70));
void    SetTranspColor(COLORREF transpCREF);

详细说明

创建CUniButton时,会自动完成WAV支持的可用性检查。主函数可以通过调用WavIsSipported()在调用LoadWAV()之前检查可用性。但是,由于LoadWAV()本身会进行类似的检查,因此在没有事先检查的情况下调用它是安全的。

LoadWAV()有两个参数。fileName指定WAV文件的路径。如果loadMEMtrue,则会将WAV文件加载到内存缓冲区中,从而以使用内存为代价提高速度。当它为false时,每次要播放该文件时,都会创建缓冲区,并将WAV文件复制到其中,然后播放。这将比较慢,但它需要更少的内存。

在此类中,透明度有两个含义。使用SetTransparent(TRUE)设置透明度时,将忽略按钮位图,并使用背景绘制按钮。当透明度关闭时,将使用按钮位图。虽然听起来可能令人困惑,但它们是用透明度绘制的。位图的颜色(255,255,255) - 白色将变为透明。可以使用SetTranspColor()更改透明颜色。

为了尝试包含的Test.wav文件,必须将其放置在“My Device”目录中。由于我无法弄清楚如何使用模拟器来做到这一点,因此我在实际设备上测试了声音。可以从此处下载预构建的演示。

杂项

此代码按“原样”提供,不提供任何保证,并且仅供非商业用途。如有任何问题,请联系Advatronix

历史

  • 2005年12月25日:1.0版 - 初始版本。
© . All rights reserved.