CUniButton - Pocket PC 通用按钮





3.00/5 (4投票s)
一个C++中的自绘按钮类。
引言
我尝试寻找一个现成的按钮类,它可以与Pocket PC一起工作,并且看起来比微软提供的那些沉闷的按钮更好。我本以为很容易找到一个。但事实并非如此。我能找到的最好的代码仍然需要大量的修改才能满足我的期望。
目标是……嗯,让我们看看功能列表。
特点
- 自绘按钮类。
- 完全透明选项。
- 支持向上和向下按钮的透明位图。
- 按钮顶部上的纯文本或 3D 文本。
- 按钮关联的 WAV 文件。
这些是允许您制作简单且看起来/表现专业的按钮的基本要求。
使用代码
- 将UniButton.cpp和UniButton.h添加到项目中。
- 将
#include "UniButton.h"
添加到xxxxxxDlg.h文件或任何需要的地方。 - 向资源添加一个背景位图,并将成员变量
m_hBmpBkgnd
作为位图的句柄。加载位图并将结果分配给OnInitDialog()
中的句柄。该成员变量值稍后将传递给UniButton
类。在OnPaint()
中绘制背景。 - 根据需要将按钮添加到对话框资源。对于每个按钮,使用类向导添加
CButton
类型的成员变量。在xxxxxDlg.h
文件中,将CButton
类型替换为CUniButton
。在资源编辑器中,选中“自绘”属性。 - 将所需的位图添加到资源中。例如,
IDB_BITMAP_BTNUP
和IDB_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文件的路径。如果loadMEM
为true
,则会将WAV文件加载到内存缓冲区中,从而以使用内存为代价提高速度。当它为false
时,每次要播放该文件时,都会创建缓冲区,并将WAV文件复制到其中,然后播放。这将比较慢,但它需要更少的内存。
在此类中,透明度有两个含义。使用SetTransparent(TRUE)
设置透明度时,将忽略按钮位图,并使用背景绘制按钮。当透明度关闭时,将使用按钮位图。虽然听起来可能令人困惑,但它们是用透明度绘制的。位图的颜色(255,255,255) - 白色将变为透明。可以使用SetTranspColor()
更改透明颜色。
为了尝试包含的Test.wav文件,必须将其放置在“My Device”目录中。由于我无法弄清楚如何使用模拟器来做到这一点,因此我在实际设备上测试了声音。可以从此处下载预构建的演示。
杂项
此代码按“原样”提供,不提供任何保证,并且仅供非商业用途。如有任何问题,请联系Advatronix。
历史
- 2005年12月25日:1.0版 - 初始版本。