VC位图的特效
来源:互联网 发布:excel怎样做数据透视表 编辑:程序博客网 时间:2024/06/05 03:22
位图的显示,大家都比较熟悉,网上介绍的也比较多。通过位图加载时的某些参数的变化,可以达到一些特效效果,如雨滴、百叶窗效果等。
其实现途径主要是利用双缓冲加载位图和BitBlt这个函数参数的变化,这个方法在EVC和VC的各个平台都可以应用,具有通用性。
下面是代码演示,注意这段代码可以单独封装起来。
CDC memdc;
CBitmap m_bitmap;
int width; // 位图的宽度
int height; //位图的高度
//得到位图
m_bitmap.LoadBitmap(IDB_BITMAP2);
//获得绘图环境资源
CDC *pDC = new CClientDC(this);
if(!memdc.GetSafeHdc())
{
memdc.CreateCompatibleDC(pDC);
memdc.SelectObject(&m_bitmap);
}
//获取位图大小信息
BITMAP bm;
m_bitmap.GetBitmap(&bm);
width=bm.bmWidth;
height=bm.bmHeight;
pDC->Rectangle(0,0,width,height);
//水平向左扫描
for(int i=0;i<width;i++)
{
pDC->BitBlt(i,0,1,height,&memdc,i,0,SRCCOPY);
Sleep(1);
}
//水平向右扫描
for(int i=width-1;i>=0;i--)
{
pDC->BitBlt(i,0,1,height,&memdc,i,0,SRCCOPY);
Sleep(1);
}
//水平百叶窗
//每条20象素宽
int num=width/20;
for(int i=0;i<20;i++)
{
//分别扫描每条
for(int j=0;j<num+1;j++)
{
pDC->BitBlt(j*20+i,0,1,height,&memdc,j*20+i,0,SRCCOPY);
Sleep(1);
}
Sleep(1);
}
//垂直百叶窗
int num=height/20;
for(int i=0;i<20;i++)
{
//分别扫描每条
for(int j=0;j<num+1;j++)
{
pDC->BitBlt(0,j*20+i,width,1,&memdc,0,j*20+i,SRCCOPY);
Sleep(1);
}
Sleep(1);
}
//雨滴效果
{
for(int i=height-1;i>=0;i--)
{
for(int j=0;j<i;j++)
{
pDC->BitBlt(0,j,width,1,&memdc,0,i,SRCCOPY);
Sleep(1);
}
Sleep(1);
}
m_bitmap.DeleteObject();
memdc.DeleteDC();
delete pDC;
如果要实现从右向左的挤压特殊效果,必须要用定时器来实现。下面是定时器中的具体实现代码
Bimp_width是位图的宽,Bimp_high是位图的高。m_memdc是位图资源设备,在位图加载时获取,可参照第一部分的代码。
CDC *pDC = new CClientDC(this);
pDC->BitBlt(0, 0, Bimp_width - m_nLeftPos, Bimp_high, &m_memdc, m_nLeftPos, 0, SRCCOPY);
pDC->BitBlt(Bimp_width - m_nLeftPos, 0, m_nLeftPos, Bimp_high, &m_memdc, 0, 0, SRCCOPY);
m_nLeftPos += 5;//步长
if(m_nLeftPos >= Bimp_width)
{
m_nLeftPos = 0;
}
else
{
SetTimer(Event_Image, 40, NULL);
}
delete pDC;
pDC->BitBlt(0, 0, Bimp_width - m_nLeftPos, Bimp_high, &m_memdc, m_nLeftPos, 0, SRCCOPY);
pDC->BitBlt(Bimp_width - m_nLeftPos, 0, m_nLeftPos, Bimp_high, &m_memdc, 0, 0, SRCCOPY);
m_nLeftPos += 5;//步长
if(m_nLeftPos >= Bimp_width)
{
m_nLeftPos = 0;
}
else
{
SetTimer(Event_Image, 40, NULL);
}
delete pDC;
0 0
- VC位图的特效
- (转)VC下的位图特效
- VC只用GDI实现位图展现简单特效
- VC透明位图的绘制
- VC 中位图的显示
- vc显示位图的总结
- vc gdi 位图的使用
- VC添加位图遇到的问题
- VC中添加位图遇到的问题
- 按钮加载位图的几个方法 vc
- VC 位图按钮CBitmapButton的使用
- VC——位图的透明显示
- VC位图文件的保存与转换
- vc中显示位图、图标的方法
- vc之一段发送位图的代码
- VC透明位图的实现原理
- 按钮加载位图的几个方法 vc
- VC 位图按钮CBitmapButton的使用
- POJ2377 Bad Cowtractors【Kruskal】【求最大生成树】
- php 关于namespace的一下总结
- OneNet
- Web性能优化的十个技巧
- js去掉字符串前后空格
- VC位图的特效
- 2015年寒假集训专题--- 数据结构实验之栈:行编辑器
- JAVA学习笔记15——抽象类+接口
- 利用libpng中的函数读写png文件
- 条件化简(一)
- poj_3274 哈希
- 图像解码之一——使用libjpeg解码jpeg图片
- 使用asm.jar将Android手机屏幕投影到电脑
- 没天理的贪心,做不完作业怎么少挨批