MFC淡出效果核心代码
来源:互联网 发布:迪恩网络模板 编辑:程序博客网 时间:2024/05/22 17:56
//透明混合
void AlphaBlendU(PBYTE pDest, PBYTE pSrcBack, int cx, int cy, PBYTE pSrc, BYTE byAlpha)
...{
const BYTE byDiff = (BYTE)(255 - byAlpha);
for (int i = 0; i < cx * cy; i++)
...{
pDest[0]=(BYTE)((pSrcBack[0] * byDiff + pSrc[0] * byAlpha)>>8); //blue
pDest[1]=(BYTE)((pSrcBack[1] * byDiff + pSrc[1] * byAlpha)>>8); //green
pDest[2]=(BYTE)((pSrcBack[2] * byDiff + pSrc[2] * byAlpha)>>8); //red
pDest += 4; // the 4th byte is preserved.
pSrcBack += 4;
pSrc += 4;
}
}
//淡出绘制核心代码
void AnimateFade(CDC* pDestDC, CDC* pSrcDC, CRect rc, int nSteps, int nAnimationTime)
...{
const int cx = rc.Width();
const int cy = rc.Height();
BITMAPINFOHEADER BMI;
// Fill in the header info.
ZeroMemory (&BMI, sizeof (BMI));
BMI.biSize = sizeof(BITMAPINFOHEADER);
BMI.biWidth = cx;
BMI.biHeight = cy;
BMI.biPlanes = 1;
BMI.biBitCount = 32;
BMI.biCompression = BI_RGB; // No compression
BYTE * pSrcBits = NULL;
HBITMAP hbmSrc = CreateDIBSection (NULL, (BITMAPINFO *)&BMI, DIB_RGB_COLORS, (void **)&pSrcBits, 0, 0l);
BYTE * pSrcBackBits = NULL;
HBITMAP hbmSrcBack = CreateDIBSection (NULL, (BITMAPINFO *)&BMI, DIB_RGB_COLORS, (void **)&pSrcBackBits, 0, 0l);
BYTE * pDestBits = NULL;
HBITMAP hbmDest = CreateDIBSection (NULL, (BITMAPINFO *)&BMI, DIB_RGB_COLORS, (void **)&pDestBits, 0, 0l);
// Copy our source and destination bitmaps onto our DIBSections,
// so we can get access to their bits using the BYTE *'s we passed into CreateDIBSection
CDC dc;
dc.CreateCompatibleDC(NULL);
HBITMAP hbmpOld = (HBITMAP) ::SelectObject(dc, hbmSrc);
::BitBlt(dc, 0, 0, cx, cy, pSrcDC->GetSafeHdc(), 0, 0, SRCCOPY);
::SelectObject(dc, hbmSrcBack);
::BitBlt(dc, 0, 0, cx, cy, pDestDC->GetSafeHdc (), 0, 0, SRCCOPY);
DWORD dwTimePer = nAnimationTime / nSteps;
::SelectObject(dc, hbmDest);
for (int i = 1; i < nSteps; ++i)
...{
DWORD dwTime = GetTickCount ();
AlphaBlendU(pDestBits, pSrcBackBits, cx, cy, pSrcBits, (BYTE)(255 * i / nSteps));
pDestDC->BitBlt(rc.left, rc.top, rc.Width(), rc.Height(), &dc, 0, 0, SRCCOPY);
dwTime = GetTickCount () - dwTime;
if (dwTime < dwTimePer)
...{
Sleep(dwTimePer - dwTime);
}
}
::SelectObject(dc, hbmpOld);
DeleteObject(hbmSrc);
DeleteObject(hbmSrcBack);
DeleteObject(hbmDest);
}
void AlphaBlendU(PBYTE pDest, PBYTE pSrcBack, int cx, int cy, PBYTE pSrc, BYTE byAlpha)
...{
const BYTE byDiff = (BYTE)(255 - byAlpha);
for (int i = 0; i < cx * cy; i++)
...{
pDest[0]=(BYTE)((pSrcBack[0] * byDiff + pSrc[0] * byAlpha)>>8); //blue
pDest[1]=(BYTE)((pSrcBack[1] * byDiff + pSrc[1] * byAlpha)>>8); //green
pDest[2]=(BYTE)((pSrcBack[2] * byDiff + pSrc[2] * byAlpha)>>8); //red
pDest += 4; // the 4th byte is preserved.
pSrcBack += 4;
pSrc += 4;
}
}
//淡出绘制核心代码
void AnimateFade(CDC* pDestDC, CDC* pSrcDC, CRect rc, int nSteps, int nAnimationTime)
...{
const int cx = rc.Width();
const int cy = rc.Height();
BITMAPINFOHEADER BMI;
// Fill in the header info.
ZeroMemory (&BMI, sizeof (BMI));
BMI.biSize = sizeof(BITMAPINFOHEADER);
BMI.biWidth = cx;
BMI.biHeight = cy;
BMI.biPlanes = 1;
BMI.biBitCount = 32;
BMI.biCompression = BI_RGB; // No compression
BYTE * pSrcBits = NULL;
HBITMAP hbmSrc = CreateDIBSection (NULL, (BITMAPINFO *)&BMI, DIB_RGB_COLORS, (void **)&pSrcBits, 0, 0l);
BYTE * pSrcBackBits = NULL;
HBITMAP hbmSrcBack = CreateDIBSection (NULL, (BITMAPINFO *)&BMI, DIB_RGB_COLORS, (void **)&pSrcBackBits, 0, 0l);
BYTE * pDestBits = NULL;
HBITMAP hbmDest = CreateDIBSection (NULL, (BITMAPINFO *)&BMI, DIB_RGB_COLORS, (void **)&pDestBits, 0, 0l);
// Copy our source and destination bitmaps onto our DIBSections,
// so we can get access to their bits using the BYTE *'s we passed into CreateDIBSection
CDC dc;
dc.CreateCompatibleDC(NULL);
HBITMAP hbmpOld = (HBITMAP) ::SelectObject(dc, hbmSrc);
::BitBlt(dc, 0, 0, cx, cy, pSrcDC->GetSafeHdc(), 0, 0, SRCCOPY);
::SelectObject(dc, hbmSrcBack);
::BitBlt(dc, 0, 0, cx, cy, pDestDC->GetSafeHdc (), 0, 0, SRCCOPY);
DWORD dwTimePer = nAnimationTime / nSteps;
::SelectObject(dc, hbmDest);
for (int i = 1; i < nSteps; ++i)
...{
DWORD dwTime = GetTickCount ();
AlphaBlendU(pDestBits, pSrcBackBits, cx, cy, pSrcBits, (BYTE)(255 * i / nSteps));
pDestDC->BitBlt(rc.left, rc.top, rc.Width(), rc.Height(), &dc, 0, 0, SRCCOPY);
dwTime = GetTickCount () - dwTime;
if (dwTime < dwTimePer)
...{
Sleep(dwTimePer - dwTime);
}
}
::SelectObject(dc, hbmpOld);
DeleteObject(hbmSrc);
DeleteObject(hbmSrcBack);
DeleteObject(hbmDest);
}
- MFC淡出效果核心代码
- MFC淡出效果核心代码
- MFC 对话框淡入淡出效果
- 页面跳转淡入淡出效果代码
- 【代码笔记】iOS-淡出淡入效果
- 淡出效果
- MFC 中实现窗口淡入淡出、逐步放大显示效果
- MFC 中实现窗口淡入淡出、逐步放大显示效果
- MFC socket网络通讯核心代码
- C# 几种窗口淡入淡出效果代码
- 纯代码增强wordpress评论编辑器实现淡入淡出效果
- 基于jquery的淡入淡出选项卡效果代码
- Android 页面切换代码(淡入淡出效果)
- 页面淡入淡出效果
- 淡入、淡出效果
- 淡入淡出效果
- 窗口淡入淡出效果
- 窗体淡入淡出效果
- example illustrates autoboxing and unboxing
- windows网络命令
- c#.net常用函数列表
- JDK5.0新特性
- 事务隔离级别示例代码
- MFC淡出效果核心代码
- WSE使用总结
- SSH的安装,配置,使用
- php session技术测试使用小结
- 在并发事务中加锁的示例代码
- 老子·道德经白话文解释
- DataBinder.Eval
- 数据库中的DB-link使用
- 得到对象调用的其他对象,显示为树形结构