用Win32 API创建不规则窗口

转载 2007年10月09日 18:19:00
 

<SCRIPT type=text/javascript> <!-- google_ad_client = "pub-9346728666813782"; google_alternate_color = "FFFFFF"; google_ad_width = 468; google_ad_height = 60; google_ad_format = "468x60_as"; google_ad_type = "text_image"; google_ad_channel ="1236939428"; google_color_border = "FFFFFF"; google_color_bg = "FFFFFF"; google_color_link = "FF3300"; google_color_url = "339966"; google_color_text = "999999"; //--> </SCRIPT>Win32 API支持创建不规则窗口,现在很多软件使用这个技术,如:QuickTime,Windows Media Player 7等。

A
B
使用API创建不规则窗口主要有两种方式,即矢量形状叠加(布尔运算)和位图区域两种。无论哪种方式,都可以实现上面两图的效果。在编写这样的窗口代码前,我们必须清楚要创建的窗口的形状是否复杂,如图片B的窗口很复杂,为极不规则的窗口,很难使用矢量形状叠加的方式创建,那么可以使用区域,指定位图的透明色实现;而图片A是圆角矩形,使用简单的矢量形状叠加即可。之所以这样,是为了运行效率考虑,对于普通的不规则窗口,矢量叠加方式速度比较快。当然,位图区域方式可以创建任何形状的窗口,如果你不需要考虑运行效率(实际两种方式速度差异很小),那么不必考虑矢量形状叠加的办法,直接看位图区域的例子即可。
 
 
A.矢量叠加方式创建不规则窗口
例1:简单的窗口区域设定,使用圆角矩形
1、HRGN hRGN=CreateRoundRectRgn(0,0,200,200,20,20);//创建圆角矩形区域
2、SetWindowRgn(hRGN,TRUE);//将创建的区域设定为窗口区域
例2:多个区域叠加(布尔运算)
1、HRGN hRGN1=CreateRoundRectRgn(0,0,200,200,20,20);//创建圆角矩形区域
2、HRGN hRGN2=CreateRectRgn(10,10,20,20);//创建矩形区域
3、HRGN hRGN; CombineRgn(hRGN,hRGN1,hRGN2,RGN_DIFF);
   //使用区域1减区域2,生成新区域hRGN(可选的参数有加,减,交等,详见MSDN)
4、SetWindowRgn(hRGN,TRUE);//将创建的区域设定为窗口区域
1、HBITMAP hBmp=(HBITMAP)LoadImage(应用程序句柄, 位图文件名, IMAGE_BITMAP, 宽度, 高度, LR_LOADFROMFILE);
   //载入一个位图,该位图中的某个特定颜色将被作为透明区域处理
2、HRGN hRGN=BitmapToRegion(hBmp,RGB(255,0,0),0);//调用位图转换为区域的函数,透明色为红色,第三个参数为公差,为0即只将红色设定为透明色。如果公差为1,意味着与给定透明色的红绿蓝三色数值的差距在1范围内的颜色也将被作为透明色处理。
3、SetWindowRgn(hRGN,TRUE);//将创建的区域设定为窗口区域
说明:关于BitmapToRegion函数,它的功能就是将位图转换为区域,原理来自API: ExtCreateRegion,该函数使用RGNDATA结构中的数据创建RGN,本函数就是分析位图的各个像素点数,根据它们填充RGNDATA结构,然后创建RGN的。
由于不规则窗口专题比较简单,没有提供完整的范例,B方法的关键是BitmapToRegion函数,所以只提供了该函数的代码。如果还有不清楚的地方或者想要完整的范例, 

MFC异形窗口-多边形窗口-根据图片自定义窗口形状-CRgn

Windows中所有窗口显示默认为矩形,很多时候我们希望窗口的形状可以随意变化。这个时候我们就需要使用MFC的CRgn类, 每一个窗口都有一个自己的CRgn,定义了当前窗口的显示区域,CRgn就好像...
  • xukaiwen_2016
  • xukaiwen_2016
  • 2016年08月05日 17:07
  • 2487

用Win32 API创建不规则窗口

Win32 API支持创建不规则窗口,现在很多软件使用这个技术,如:QuickTime,Windows Media Player 7等。AB使用API创建不规则窗口主要有两种方式,即矢量形状叠加(布尔...
  • breath
  • breath
  • 2000年12月22日 02:52
  • 1361

Windows图像编程

 Windows图像编程图形设备接口(GDI,Graphics Device Interface)的主要目标之一是支持在输出设备(如视频显示器、打印机和绘图仪)上的与设备无关的图形。 GDI通过将应用...
  • teshorse
  • teshorse
  • 2006年11月26日 03:01
  • 3366

C++配合win32实现图形界面贪吃蛇游戏

  • 2013年09月11日 22:33
  • 5.35MB
  • 下载

Win32汇编教程九 复杂形状的窗口

--------------------------------------------------------------------------------概述在前面八篇的 Win32asm 教程...
  • ghj1976
  • ghj1976
  • 2000年12月15日 10:47
  • 1768

win32 api 实现不规则形状按钮

最近在看环境下32位汇编语言程序设计>>这本书。与其说在看汇编,更像是在看windows sdk.这本书基本上就是程序设计>>的汇编版。但是我觉得这本书比程序设计>>看起来更舒服,也许是那本书是翻译过...
  • korekara88730
  • korekara88730
  • 2011年10月12日 09:37
  • 4462

win32实现扫雷程序,图形化界面,仿windows自带扫雷

  • 2010年08月28日 09:18
  • 243KB
  • 下载

Win32窗口风格

目录 用于 Gui/父窗口和大多数控件类型的通用样式Text | Edit | UpDown | PictureButton | Checkbox | Radio | GroupBoxDropD...
  • i7thTool
  • i7thTool
  • 2014年03月03日 17:01
  • 2663

[Win32 & GDI+Flat] 用分层窗口实现简单仿Aero透明效果

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处: 首先说一下GDI+Flat:我有写过一个GDI+Flat的系列博客,一共有10篇,都是顺...
  • zuishikonghuan
  • zuishikonghuan
  • 2015年09月01日 13:59
  • 4222

在windows上创建完美的不规则窗口

在windows上创建完美的不规则窗口不规则窗口方法简介windows上的窗口绝大多数是方形的,但是偶尔也会有一些其他形状的窗口,如圆形甚至不规则形状。这些不常见的窗口是如何做出来的呢? 有两种方法...
  • bjrxyz
  • bjrxyz
  • 2017年02月04日 19:01
  • 776
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用Win32 API创建不规则窗口
举报原因:
原因补充:

(最多只允许输入30个字)