正在阅读:Visual C++中的图形特技Visual C++中的图形特技

2005-04-28 09:57 出处: 作者:赵敏之 责任编辑:huangpeidan

实现方法

  下面介绍各种图形显示技巧的具体实现原理及方法。以下所有程序算法的实现均可放在视类(CView,也可视自己的需要放在其他类)中处理,且有必要进行如下的相关操作:

  增加如下类成员变量:

BITMAP m_Bm;
//保存位图的宽、高度等数据
HBITMAP *m_hBitmap;
//保存位图数据句柄
CDC m_MemDC; //内存设备情境对象

  在类构造函数中加入如下代码:

m_MemDC.CreateCompatibleDC(NULL); //产生内存设备情境对象
m_hBitmap=(HBITMAP *)::LoadImage(
//从文件中装入位图数据
AfxGetInstanceHandle(),
“demo1.bmp”,
IMAGE_BITMAP,
0,0,
LR_LOADFROMFILE );
m_MemDC.SelectObject(m_hBitmap); //将位图选入内存设备情境对象
::GetObject(m_hBitmap,sizeof(m_Bm),&m_Bm);

  1. 水平交错效果

  原理:将内存设备情境对象(如MemDC)中的位图数据拆分成奇、偶扫描线两部分,其中奇数条扫描线由上往下移动,偶数条扫描线则由下往上移动,且两者同时进行。屏幕上的效果为分别由上下两端出现的较淡栅栏图形,逐渐相互靠近,直至整个位图完全清楚。垂直交错效果的实现原理与之类似。

程序算法:

int i,j;
for ( i=0; i<=m_Bm.bmHeight; i+=2 )
{j = i;
while ( j>0 )
{ClientDC.StretchBlt(
//奇数,由上至下
0,j-1,
//目标设备逻辑横、纵坐标
m_Bm.bmWidth,1,
//显示位图的像素宽、高度
&m_MemDC,
//源位图设备情境对象
0,m_Bm.bmHeight-(i-j-1),
//源位图的起始横、纵坐标
m_Bm.bmWidth,1,
//源位图的像素宽、高度
SRCCOPY);
ClientDC.StretchBlt(
//偶数,由下至上
0,m_Bm.bmHeight-j,
//目标设备逻辑横、纵坐标
m_Bm.bmWidth,1,
//显示位图的像素宽、高度
&m_MemDC,
//源位图设备情境对象
0,i-j,
//源位图的起始横、纵坐标
m_Bm.bmWidth,1,
//源位图的像素宽、高度
SRCCOPY);
j-=2; }
// while ( j>0 )
Sleep(10);
}
//for ( i=0; i<=m_Bm.bmHeight; i+ =2 )

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品