Windows Mobile 使用GDI实现BUTTON效果
2010-08-23 05:19:00 来源:WEB开发网当我们开发WM程序的时候,BUTTON控件用得比较多,通常用BUTTON控件捕捉用户点击的消息,在这里我们可以使用GDI方式实现类似BUTTON控件的功能。
实现思路( 伪代码):
1. 建立两个文件: MyButton.h MyButton.cpp
2. 在MyButton.h 中声明几个变量
// 外部接口:
public:
void AddButton(CString sDownImage, Cstring sUpImage); // 设置一个BUTTON按下前后的图片路径
void SetButtonRect(CRect rc); // 设置该BUTTON的位置以及大小
int OnClick(IN HWND hwnd, IN CPoint pt); // 返回选*能菜单
// 内部函数:
protected:
CRect rc[10] // 这里假设定义的是10个button, 分别用来记录每个button的位置。
HBITMAP hDownBitmap[10] // 定义按下时图片
HBITMAP hUpBitmap[10] // 定义松开时图片
void InitButtonImage(HWND hWnd); // 初始化图标
void SetDownButtonImage(HWND hWnd, int nPreSel); // 声明按下图标方法
void SetUpButtonImage(HWND hWnd, int nSel); // 声明松开图标方法
protected:
int m_nCurrentCount; // 当前BUTTON数目
protected:
int m_nCurrentSel; // 当前选中图标的索引
int m_nPreSel; // 上一级选中图标索引
3. MyButton.cpp 实现
MyButton::MyButton()
{
m_nCurrentCount = 0;
// 初始化
for(int n = 0; n < 10; n ++)
{
hDownBitmap[n] = NULL;
hUpBitmap[n] = NULL;
}
}
void MyButton::AddButton(CString sDownImage, CString sUpImage)
{
hDownBitmap[m_nCurrentCount] = SHLoadImageFile(sDownImage);
// 这里应该加个断言防止加载失败
ASSERT(NULL != hDownBitmap[m_nCurrentCount]);
hUpBitmap[m_nCurrentCount] = SHLoadImageFile(sUpImage);
// 这里应该加个断言防止加载失败
ASSERT(NULL != hUpBitmap[m_nCurrentCount]);
m_nCurrentCount ++;
}
void MyButton::SetButtonRect(CRect rc)
赞助商链接