位图的淡入淡出显示

我们经常在AboutBox中显示一幅关于公司或自己讯息的位图,有没有想过让这幅位图有更酷的效果?比如加上淡入淡出效果?只要有了这个CAlphaCtrl控件就可以轻松实现。

CAlphaCtrl是从CStatic继承而来。使用时只要把CalphaCtrl加入窗体,然后调用LoadAlphaBitmap(UINT uID, int iTimer)函数就可以实现位图的淡入淡出。其中uID是位图的资源ID,iTimer是位图显示时间间隔,值愈小显示愈快。

下面就来说一说CalphaCtrl是如何实现的。关键的一个实现函数是一个win32 API: AlphaBlend,此函数可以实现图像的透明显示,相关的参数和资料请自行参阅MSDN,值得注意的是使用此函数时要链接到msimg32.lib库。

第一步,我们先在CalphaCtrl类中增加几个Data Member:CBitmap Bmp;

BOOL bCanPaint; UINT nBmpID; int nTimer;

第二步,在CalphaCtrl类中增加一个Member Function:

void AlphaDisplay(CDC &pDC, CClientDC &dc, BLENDFUNCTION& rBlendProps, int width, int heigh, byte nLevel)
{
    //nLevel是透明度,0表示不显示,255则完全显示
    rBlendProps.SourceConstantAlpha = nLevel;
    AlphaBlend( dc.m_hDC, 0, 0, width, heigh, pDC.m_hDC, 0, 0,
    width, heigh, rBlendProps );
}

第三步,增加一个名为tdDisplay的全局函数,此函数为一个线程函数,用于位图的显示。

UINT tdDisplay(LPVOID lpParam)
{
    CAlphaCtrl* AlphaCtrl = (CAlphaCtrl*)lpParam;    CClientDC dc(AlphaCtrl);
    CDC pDC;
    pDC.CreateCompatibleDC(&dc);
    pDC.SelectObject(&AlphaCtrl->Bmp);    BLENDFUNCTION rBlendProps;
    rBlendProps.BlendOp = AC_SRC_OVER;
    rBlendProps.BlendFlags = 0;
    rBlendProps.AlphaFormat = 0;   BITMAP bmInfo;
    ::GetObject( AlphaCtrl->Bmp.m_hObject, sizeof(BITMAP), &bmInfo );
    INT nWidth, nHeigh;
    nWidth = bmInfo.bmWidth;
    nHeigh = bmInfo.bmHeight;AlphaCtrl->SetWindowPos(NULL, 0, 0, nWidth, nHeigh, SWP_NOMOVE);
   int i = 0;
    while(i <= 255)
    {
    AlphaCtrl->AlphaDisplay(pDC, dc, rBlendProps, nWidth, nHeigh, i);
    i += 5;
    Sleep(AlphaCtrl->nTimer);
    }
   AlphaCtrl->bCanPaint = 1; //Make OnPaint Word
    AfxEndThread(0);
    return 0;
}


第四步,现在万事俱备,加上初始化函数:

BOOL LoadAlphaBitmap(UINT uID, int iTimer)
    {
    int i = Bmp.LoadBitmap(uID);
    
    if(i)
    {
    AfxBeginThread(tdDisplay, this);
    nBmpID = uID;
    nTimer = iTimer;
    return 1;
    }
    else
    {
    TRACE("Load Bitmap Failed\n");
    return 0;
    }
    
    return 1;
    }

最后,执行程序,打开你的对话框看一看那幅很酷的位图!

时间: 2024-07-28 12:56:16

位图的淡入淡出显示的相关文章

C#实现淡入淡出显示图像效果显示图片

以淡入淡出显示图像效果显示图像主要使用了ImageAttributes类的SetColorMatrix方法设置颜色调整矩阵实现淡入淡出的效果.ImageAttributes对象维护多个颜色调整设置,包括颜色调整矩阵.灰度调整矩阵.灰度校正值.颜色映射表和颜色阈值.呈现过程中,可以对颜色进行校正.调暗.调亮和移除. 淡入效果代码如下: private void button1_Click(object sender, EventArgs e){ //淡入显示图像 try { Graphics g

jQuery实现点击小图片淡入淡出显示大图片特效_jquery

分享一款基于jQuery点击淡入淡出显示图片特效.这是一款基于jQuery+CSS3实现酷炫效果的图片切换特效代码.效果图如下: 在线预览    源码下载 html代码: <center><p style="color:#334960">点击图标进行展示</p></center> <div class="main"> <div id="coolShow"></div&g

jQuery入门(6) 淡入淡出效果

jQuery 提供了下面几种方法可以实现显示的淡入淡出效果: fadeIn() fadeOut() fadeToggle() fadeTo() fadeIn()方法 fadeIn() 实现淡入效果,其基本语法如下 : $(selector).fadeIn(speed,callback); 可选参数speed给出了淡入效果的时间,可以 使用 "slow","fast" 或是数值(微秒) 第二个可选参数为回调函数,在fadeIn()方法结束后调 用. $("b

Android模仿To圈儿个人资料界面层叠淡入淡出显示效果_Android

前几天做的一个仿To圈个人资料界面的实现效果 下面是To圈的效果Gif图: 做这个东西其实也花了一下午的时间,一开始思路一直没理清楚,就开始盲目的去做,结果反而事倍功半. 以后要吸取教训,先详细思考清楚其中的逻辑关系,然后再开始动手写代码,这样比较容易理顺. 可以看到实现这个效果还是不难的,得分成以下三个步骤: 1:首先要有一个可拖动的详细资料布局(下半部分). 2:上半部分可跟随移动. 3:标题栏由隐藏到显示. 涉及到的技术点有: 1:屏幕像素密度DP转化. 2:自定义视图的OnTouchLi

[Android]异步加载图片,内存缓存,文件缓存,imageview显示图片时增加淡入淡出动画

以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3574131.html  这个可以实现ImageView异步加载图片,内存缓存,文件缓存,imageview显示图片时增加淡入淡出动画. github地址:https://github.com/wangjiegulu/ImageLoaderSample 解决了: 1. listview加载oom问题 2. listview加载时卡顿的现象 3. listview

测试SDWebImage淡入淡出效果在UITableView中的重用显示问题

测试SDWebImage淡入淡出效果在UITableView中的重用显示问题 这个是在上一篇教程的基础上所添加的测试环节! 效果图(从效果图中看是没有任何重用问题的): 源码: ImageCell.h 与 ImageCell.m // // ImageCell.h // SDWebImageFade // // Created by YouXianMing on 14-10-5. // Copyright (c) 2014年 YouXianMing. All rights reserved. /

vc.net中实现启动画面淡入淡出

找了半天没找实现启动画面来个淡入淡出的代码,只好自己写了个,呵呵,还不错拿给大家看看. #undef WINVER //取消原有版本定义,重新定义版本 #define WINVER 0x5000 //为了使AnimateWindow函数可用 #include <afxwin.h> 然后在相关文件分别加入OnCreate,OnClose,OnEraseBkgnd和OnTimer消息函数.记得在相关构析函数内加入 : SetTimer(1, 3000, NULL); //设定定时器1,定时3秒 O

VC简易方法淡入淡出启动画面

一日心血来潮,想给启动画面来个淡入淡出,于是去搜索查了半天,无果.-_-b,但知道了AnimiateWindow 这个函数.好吧 ,让我们开始吧^^.首先,请在需要淡入淡出窗口的cpp文件或者stdafx.h加入下列代码(注意要加在#include前面哦,否则没有作用哦). #undef WINVER //取消原有版本定义,重新定义版本 #define WINVER 0x5000 //为了使AnimateWindow函数可用 #include <afxwin.h> 然后在相关文件分别加入OnC

原生js和jquery实现图片轮播淡入淡出效果

  原生js和jquery实现图片轮播淡入淡出效果          本文给大家分享的是使用原生的js和jQuery2种方法,分别实现图片轮播的淡入淡出效果的代码,非常实用,也方便小伙伴们对比分析,希望对大家学习js和jq能够有所帮助. 图片轮播有很多种方式,这里采用其中的 淡入淡出形式 js原生和jQuery都可以实现,jquery因为封装了很多用法,所以用起来就简单许多,转换成js使用,其实也就是用js原生模拟出这些用法. 但不管怎样,构造一个最基本的表现层是必须的 简单的图片轮播一般由几个