桌面精灵制作解析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介:
最近一直在做一个涉及到很多Windows Region区域处理的项目,在开展的过程中,另我想起了几年前看到的一篇讲制作桌面精灵的文章( [url]http://www.vckbase.com/vckbase/vckbase12/vc/nonctrls/multimedia_22/1222001.htm[/url]),里面使用的技巧就是区域操作,但由于当时的水平不够,该文章的作者解释得又不是很详细,一直没有看懂,此番重读此代码,终于理解了,在这里记录下来。
那个代码(参见上面的连接)例子的主要部分如下:
首先要说明的是,桌面精灵图片是由中间一个人物和四周是白色象素的一个合成的矩形。这个也可以参见链接提供的源码中的资源文件。
void TransparentWnd::SetupRegion(CDC *pDC)
{
 CDC     memDC;
 CBitmap   &cBitmap=m_bmpDraw;
 CBitmap*  pOldMemBmp = NULL;
 COLORREF  col,colMask;
 CRect    cRect;
 int     x, y;
 CRgn    wndRgn, rgnTemp;
 GetWindowRect(&cRect);
 CPoint ptOrg=cRect.TopLeft();
 BITMAP bmInfo;
 cBitmap.GetObject(sizeof(bmInfo),&bmInfo);
 CRect rcNewWnd=CRect(ptOrg,CSize(bmInfo.bmWidth,bmInfo.bmHeight));
 memDC.CreateCompatibleDC(pDC);
 pOldMemBmp = memDC.SelectObject(&cBitmap);
 colMask=memDC.GetPixel(0,0);//这里取得左上角的象素,为白色。
 wndRgn.CreateRectRgn(0, 0, rcNewWnd.Width(), rcNewWnd.Height());
 for(x=0; x<=rcNewWnd.Width(); x++)
 {
  for(y=0; y<=rcNewWnd.Height(); y++)
  {
   //这里比较图片每一点上的象素,如果和左上角的象素相同,即也是白色,就做异或运算,结果为0,意即扣去了这一点,如此这般就扣去了整个矩形图片中所有白色的部分,剩余的部分就是精灵人物了。
   col = memDC.GetPixel(x, y);
   if(col == colMask)
   {
    rgnTemp.CreateRectRgn(x, y, x+1, y+1);
    wndRgn.CombineRgn(&wndRgn, &rgnTemp, RGN_XOR);
    rgnTemp.DeleteObject(); 
   }
  }
 }
 if (pOldMemBmp) memDC.SelectObject(pOldMemBmp);
 SetWindowRgn((HRGN)wndRgn, TRUE);//这句话是将窗口的形状设置为剩余区域的大小。
 MoveWindow(rcNewWnd);
}
//然后在重绘窗口函数中,调用位拷贝函数BitBlt来贴图。该重绘窗口函数由Invalidate()触发。
BOOL TransparentWnd::OnEraseBkgnd(CDC* pDC) 
{
    CRect rect;
 GetWindowRect(&rect);
 CDC memDC;
 CBitmap   &cBitmap=m_bmpDraw;;
 CBitmap*  pOldMemBmp = NULL;
 CFont* pOldMemFont=NULL;
 memDC.CreateCompatibleDC(pDC);
 pOldMemBmp = memDC.SelectObject(&cBitmap);
 pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY);
 if (pOldMemBmp) memDC.SelectObject( pOldMemBmp );
 return TRUE; 
// return CWnd::OnEraseBkgnd(pDC);
}
 









本文转自 xchsp 51CTO博客,原文链接:http://blog.51cto.com/freebird/88476,如需转载请自行联系原作者

目录
相关文章
|
机器学习/深度学习 人工智能 算法
photoshop2023永久电脑版下载 一款强大的图片创意编辑工具
说到Adobe相信大家最熟悉的就是ps了,因此今日为大家介绍下ps2023全称为photoshop2023,这是一款强大的图片创意编辑工具,全新的ps2023与上个版本相比,该版本为大家带来了更多的新功能及优化,例如添加了一个“Neural Gallery”的滤镜功能,而翻译为中文就是神经画廊滤镜,也许听名字感觉很奇妙,但根据功能来说,其叫做神经网络智能滤镜(AI滤镜)比较合适,它应该是利用人工神经网络算法,根据图片内容进行智能修饰,让修图变得更加简单。另外,在ps2023这种还提供了一个自动抠天空和替换天空功能,
260 0
|
前端开发 定位技术 图形学
Unity3D制作塔防类游戏
Unity3D制作塔防类游戏
|
9月前
微信小游戏制作工具中关于背景图的设置
微信小游戏制作工具中关于背景图的设置
262 0
|
4月前
|
前端开发 JavaScript 测试技术
如何制作网页
创建自己的网站涉及多个步骤,从确定主题到最终测试和发布。本文详细介绍了每个步骤:首先明确网站目的和受众;其次设计直观易用的布局;选择符合主题的颜色和字体;撰写清晰简洁的内容;优化加载速度;全面测试功能和兼容性;选择托管服务并注册域名;最后通过SEO、社交媒体和广告进行推广。注意事项包括关注用户体验、学习基本编码知识,并考虑网站的扩展性和可维护性。遵循这些步骤,你将能创建一个美观且实用的网站。
|
C#
Magical NoteNet桌面贴小工具
Magical NoteNet是一款轻型的桌面即时贴便签软件,主要是方便记录一些个人小消息或文本。有时候需要记录一些临时的任务或者打电话时记录电话号码等等。该软件可以间接替代微软的记事本,因为从这里你不必为了鼠标右键生成记事本txt文件而麻烦,同样可以不用去整理临时的记事本文件和更改文件名。
876 0
|
Windows
Camtasia2023电脑版屏幕录像和编辑软件
Camtasia屏幕录像机使用方便,视频编辑功能强大。与iSpring一样,可以捕获屏幕的任何部分,使用网络摄像头录制和插入视频,并支持音频、图像和文本的截屏。Camtasia包括绿屏在内的全套动画和视频效果。为了让课程更沉浸,你可以添加自己的音乐,或者从Camtasia在免版税音乐库中选择曲目。
189 0
制作网站快捷方式
制作网站快捷方式
141 0
制作网站快捷方式
|
前端开发 Shell
精品素材:15套免费的 Photoshop 自定义图形集
  网上到处都是 Photoshop 笔刷,图案,纹理素材,最缺少的就是 Photoshop 形状。寻找定制的 Photoshop 形状是真的很难,因为很少有人提供这样的 Photoshop 形状的集合。
1153 0
|
Web App开发
分享45个优秀的 Photoshop 制作网页教程
  不可否认,Photoshop 是最好的设计软件,网页设计师在有限的画布上发挥他们的创造力,不管是简单的还是复杂的网页布局,通过 Photoshop 都能得心应手的制作出来。今天这篇文章向大家分享45个优秀的 Photoshop 制作网页教程,相信看完这些教程,你也可以制作出漂亮的网页作品。
1086 0

热门文章

最新文章