1. 从网上下载自己所需按钮图片,并转换为bmp格式(若选用图标,则转换为ico格式),将图片放在项目的res文件夹下。再将两个图标导入到资源视图中(资源视图下的Bitmap上点击(若bitmap,则在Icon上也可,最后会自动生成Bitmap)→添加资源→新弹出对话框中选择Bitmap,再单击导入→选择res文件夹中刚才存放的图片→则添加成功,在Bitmap下刚添加的位图的属性页更改好记的ID),一个代表灯亮,ID改为 IDB_ON,一个代表灯灭,ID改为IDB_NOT。(图标属性默认为IDI_ICON1 、 IDI_ICON2 等,可自行修改).
2.添加图标句柄变量。
若加载的图片为Bitmap,则将已经定义变量语句放在相应地方(若变量要为全局变量,则放在cpp文件最顶或头文件中,其他自定都可)
HBITMAP m_hIcon_close;
HBITMAP m_hIcon_open;
若加载的图片是图标ico,则将一下语句放入相应地方。
HICON m_hIcon_close;
HICON m_hIcon_open;
3. 利用函数加载图标资源(单文档程序在CMainFrame 类中的 OnCreate 函数中添加;对话框程序在 OnInitDialog 函数中添加)
若为位图Bitmap时:
m_hIcon_open=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_ON));
m_hIcon_close=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_NOT));
其中,IDB_ON,IDB_NOT为 相应运行or停运状态对应的位图ID.
若为图标Icon时:
m_hIcon_open=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(ICON_ON));
m_hIcon_close=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(ICON_NOT));
4. 给控件添加变量,类型为 CStatic 类型的。变量暂定义为 m_icon_open.
具体步骤为:
I.从工具箱往对话框中拖入picture control,在其属性中将其ID从IDC_STATIC改为其他(不改的话,则后面创建变量会失败),这里改为IDC_PictureControl。其次,picture control的属性栏中将其Type项的选项改为Bitmap,若加载的图片是图标则选Icon。
II.在对话框上选中刚拖入的picturecontrol,点击右键,选中添加变量,在弹出对话框中检查,变量类型应为“CStatic”,变量名设置为自己好记的,这里设为m_bitmap。
4.此时已可利用函数控制位图的加载了。
若为位图,利用以下下语句加载相应位图:
m_bitmap.SetBitmap(m_hIcon_open);
m_bitmap.SetBitmap(m_hIcon_close);
若为图标,利用一下语句加载相应ico:
m_bitmap.SetIcon(m_hIcon_open);
m_bitmap.SetIcon(m_hIcon_close);
此时,若不用使按钮闪烁,只需显示其中一个样式,则只需设置一个按键,并在其消息处理函数中加入
m_bitmap.SetBitmap(m_hIcon_open);
m_bitmap.SetBitmap(m_hIcon_close);加载不同位图即可使用了。
5. 开始利用定时器,使其不停的重复更换位图。
定时器原理:利用 SetTimer开启定时器,使其按照SetTimer中定义的时间重复运行OnTimer中对应ID号的程序,直到执行KillTimer函数才停止。
I.添加OnTimer函数:
在vs中的类视图中找到要添加定时器的类(一般放在“C项目名称Dlg”类中),在该类上点击右键,打开属性页面,在属性页面上方的图标中找到“消息”按钮并点击,找到VM_TIMER函数后方第二栏的下三角,在下拉菜单中add OnTimer。则OnTimer添加成功,以下是详细代码:
#include <math.h>//因后方有取余数符号,固应加上此头文件
Int TimerID=1;
void C*****Dlg::OnTimer(UINT_PTR nIDEvent)
{
//TODO: 在此添加消息处理程序代码和/或调用默认值
switch(nIDEvent)
{
case1:
if(TimerID%2==0)
{
m_bitmap.SetBitmap(m_hIcon_close);
TimerID++;
}
else
{
m_bitmap.SetBitmap(m_hIcon_open);
TimerID++;
}
default:
break;
}
CDialogEx::OnTimer(nIDEvent);
}
II.按下“开始”按键,图标开始闪烁;按下“暂停”键,图标暂停闪烁。
第一步,在对话框上拖入两个按键,并命名为 开始闪烁、暂停闪烁。
第二部,为按键添加消息处理函数。在相应按键上点击右键,选择“添加时间处理程序”,在新弹出对话框中将“函数处理程序名称”改为自己好记的,再点击“编辑添加”,完成操作。
第三步,分别给刚才添加的程序中,添加定时器的启动,暂定函数。在开始按键的函数内加入SetTimer(1, 500, NULL);,即定时器1每500毫秒启动相应程序一次;在暂停按键的函数中加入KillTimer(1);,即按下停止键,则关闭定时器1.