MFC中利用picture control控件设置闪烁按钮。(控件以加载bitmap位图为例)

来源:互联网 发布:一淘和淘宝联盟转换 编辑:程序博客网 时间:2024/05/09 01:44

    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.

0 0