首 页 ┆ 源码下载 ┆ IT学院 ┆ 字体下载 ┆ 模板下载 ┆ 源码发布 ┆ 广告合作 ┆ 网站地图 ┆ 虚拟主机 ┆ 中文域名
► 设为首页
► 加入收藏
► 联系我们
源码下载 >> ASP源码 | PHP源码 | ASP.net源码 | JSP源码 | CGI源码 | VC/C++源码 | VB源码 | Delphi源码 | Flash源码
文章学院 >> 网络编程 | 网页设计 | 图形图象 | 数据库 | 服务器 | 网络媒体 | 网络安全 | 操作系统 | 办公软件 | 软件开发 | 黑客知识
字体下载 >> 精制字体 | 非英字体 | 艺术字体 | 著名字体 | 哥特式 | 简单字体 | 手写体 | 节假日 | 图案字体 | 精度像素 | 中文字体
模板下载 >> 企业门户 | 数码网络 | 休闲娱乐 | 影视音乐 | 旅游名胜 | 文化艺术 | 电子商务 | 个性展示 | 登陆导航 | Flash模板
►►您当前的位置:源码园 → IT学院 → 软件开发 → VC编程 → 文章内容

WIN XP关机的特效实现

作者:小帅  来源:网上收集  发布时间:2007-3-27 10:13:17

WIN XP关机的特效实现

作者:小帅

下载源代码

  本人在网上搜罗过一些与关机有的代码,发现关机的代码差不多都一样,而对关机前的特效的代码几科没有,只有一个WIN2000的,其方法如:制造一个刷子,用灰色刷屏幕!以下这部分为网上的一个老版本的关机效果代码,不是很好。

HBITMAP hbm=CreateBitmap(8, 8, 1, 1, pbit);HBRUSH hbr=CreatePatternBrush(hbm);HDC hdc=CreateDC(_T("DISPLAY"), NULL, NULL, NULL);HDC hdc0=::GetDC(0);SelectObject(hdc,hbr);PatBlt(hdc, 0, 0, GetDeviceCaps(hdc, VERTRES), GetDeviceCaps(hdc, HORZRES ),0xa000c9);
  用到了一个刷子函数:PatBlt,这个还是在VB的书上看到的,各大网上相互用上了,试了一下,效果不是很理想!(主要是屏幕颜色静止不变化,XP的关机前屏幕是逐渐变化至白化的,这个过程是动态随时间而变化的)无意中在CODEPROJECT站上经人指点,获得了一个比较好的,与大家分享一下,主要是仿XP关机的渐变屏幕的特效!
 ///////////////////////// 核心函数,将屏幕变暗HBITMAP CMyFade::FadeBitmap(HBITMAP hBmp, double dfTrans){HBITMAP hRetBmp = NULL;if (hBmp){HDC hBufferDC = CreateCompatibleDC(NULL);HGDIOBJ hPrevBufObject = SelectObject(hBufferDC, hBmp);HDC hDirectDC = CreateCompatibleDC(NULL);// DC for workingif (hDirectDC){BITMAP bm;GetObject(hBmp, sizeof(bm), &bm);BITMAPINFO bmInfo; ZeroMemory(&bmInfo,sizeof(bmInfo));bmInfo.bmiHeader.biSize= sizeof(BITMAPINFOHEADER);bmInfo.bmiHeader.biWidth= bm.bmWidth;bmInfo.bmiHeader.biHeight= bm.bmHeight;bmInfo.bmiHeader.biPlanes=  1;bmInfo.bmiHeader.biBitCount= 32;UINT* ptPixels;HBITMAP hDirectBitmap = CreateDIBSection(hDirectDC,(BITMAPINFO*)&bmInfo,DIB_RGB_COLORS,(void**)&ptPixels, NULL, 0);if (hDirectBitmap){// 将hDirectBitmap放入hDirectDC中处理HGDIOBJ hPrevBufDirObject = SelectObject(hDirectDC, hDirectBitmap);// 当前将原hBmp即屏幕的所有像素写入到hDirectDC// 即需要对像素灰度处理的DC中BitBlt(hDirectDC,0,0,bm.bmWidth,bm.bmHeight,hBufferDC,0,0,SRCCOPY);int iAlpha = (int)(255.0 * dfTrans / 100.0);int nSize = bm.bmWidth * bm.bmHeight;for (int i=0; i<nSize; i++){// 0.212671 * R + 0.715160 * G + 0.072169 * Bint iSrcR = (ptPixels[i]) & 0x00ff0000 >> 16;int iSrcG = ptPixels[i] & 0x0000ff00 >> 8;int iSrcB = ptPixels[i] & 0x000000ff;int iGrey = (iSrcR * 54 + iSrcG * 182 + iSrcB * 19) >> 8;COLORREF Col =iGrey ; //RGB(iGrey, iGrey, iGrey) ; ptPixels[i] = RGB((GetBValue( Col ) * iAlpha + iSrcB * (255 - iAlpha)) >> 8,(GetGValue( Col ) * iAlpha + iSrcG * (255 - iAlpha)) >> 8,(GetRValue( Col ) * iAlpha + iSrcR * (255 - iAlpha)) >> 8 );}SelectObject(hDirectDC,hPrevBufDirObject);hRetBmp = hDirectBitmap;}DeleteDC(hDirectDC);}SelectObject(hBufferDC, hPrevBufObject);DeleteDC(hBufferDC);}return hRetBmp;}
分析一下:
  1. 颜色模型的转化,即将彩色位图转化成灰度图,这个在RGB模型中即R=G=B三色值即可,也有更好HSL,HIV等模型转化,可以看计算机图形学
    上面有介绍;
  2. 即获得屏幕位图句柄,放入内存DC中处理居灰度图片,反复转换,以求得特效;
  3. 本处的色点处理采用了移位处理,即R与B值移位时注意一下移的位数,与我们想的不一样,正确的存储顺序是 BGR,每个8位;

  不知道上面的代码算不算简易实现了特效,有这方面兴趣的可以查看代码,另外本人稍感遗憾的是无法与关机的实现在一块,即整个屏幕被
控制住了,不响应鼠标的操作,希望有同仁指出实现方法。谢谢!欢迎交流xuwenq88@126.com

[] [返回上一页] [打 印]
  • 上一篇文章:自动隐藏停泊窗体实现
  • 下一篇文章:简简单单:三个函数实现框架菜单自绘

  • 相关文章:
  • 强化Win Vista服务安全的十大策略
  • 无需卸载旧版直接安装Win XP SP3
  • 激活64位Win Vista系统全过程
  • [图文]教你找回Win Vista的超级管理员账号
  • 总结Win XP操作系统故障解决常用思路
  • 安装Win Vista重启后蓝屏解决方案
  • [组图]打造Win Vista的完全控制面板
  • Win Vista SP1改进功能完全介绍
  • [图文]快速更改Win Vista系统所有者
  • [图文]60秒就能给Win Vista瘦身2GB
  • 用 Win API 实现自绘按钮类
  • WIN XP关机的特效实现
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 源码发布
Copyright © 2003-2009 Ymyasp.Com. All Rights Reserved .
备案序号:粤ICP备07029071号