📄 csdn_文档中心_用win32 api创建不规则窗口.htm
字号:
<TABLE border=0 cellPadding=0 cellSpacing=0 width="99%">
<TBODY>
<TR>
<TD width="16%">
<P
style="LINE-HEIGHT: 100%; MARGIN-BOTTOM: 2px; MARGIN-TOP: 2px"><IMG
border=0 height=116
src="CSDN_文档中心_用Win32 API创建不规则窗口.files/rgn-1.htm"
width=100>A</P></TD>
<TD width="19%"><IMG border=0 height=116
src="CSDN_文档中心_用Win32 API创建不规则窗口.files/rgn-2.htm"
width=100>B</TD>
<TD>
<P
style="LINE-HEIGHT: 100%; MARGIN-BOTTOM: 2px; MARGIN-TOP: 2px"><FONT
color=#000000 face=宋体 size=2><SPAN
style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">使用API创建不规则窗口<SPAN
style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">主要有两种方式</SPAN>,即矢量形状叠加(布尔运算)和位图区域两种。无论哪种方式,都可以实现上面两图的效果。在编写这样的窗口代码前,我们必须清楚要创建的窗口的形状是否复杂,如图片B的窗口很复杂,为极不规则的窗口,很难使用矢量形状叠加的方式创建,那么可以使用区域,指定位图的透明色实现;而图片A是圆角矩形,使用简单的矢量形状叠加即可。之所以这样,是为了运行效率考虑,对于普通的不规则窗口,矢量叠加方式速度比较快。当然,位图区域方式可以创建任何形状的窗口,如果你不需要考虑运行效率(实际两种方式速度差异很小),那么不必考虑矢量形状叠加的办法,直接看位图区域的例子即可。</SPAN></FONT></P>
<P
style="LINE-HEIGHT: 100%; MARGIN-BOTTOM: 2px; MARGIN-TOP: 2px"> </P></TD></TR></TBODY></TABLE>
<TABLE border=1 width="100%">
<TBODY>
<TR>
<TD bgColor=#66ccff width="100%">
<P
style="LINE-HEIGHT: 100%; MARGIN-BOTTOM: 2px; MARGIN-TOP: 2px"><FONT
color=#000000 face=宋体 size=2><SPAN
style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">A.矢量叠加方式创建不规则窗口</SPAN></FONT></P></TD></TR>
<TR>
<TD width="100%">
<P
style="LINE-HEIGHT: 100%; MARGIN-BOTTOM: 2px; MARGIN-TOP: 2px"><FONT
color=#000000 face=宋体 size=2><SPAN
style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">例1:简单的窗口区域设定,使用圆角矩形</SPAN></FONT></P>
<P
style="LINE-HEIGHT: 100%; MARGIN-BOTTOM: 2px; MARGIN-TOP: 2px"><FONT
color=#000000 face=宋体 size=2><SPAN
style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">1、HRGN
hRGN=CreateRoundRectRgn(0,0,200,200,20,20);//创建圆角矩形区域</SPAN></FONT></P>
<P
style="LINE-HEIGHT: 100%; MARGIN-BOTTOM: 2px; MARGIN-TOP: 2px"><FONT
color=#000000 face=宋体 size=2><SPAN
style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">2、SetWindowRgn(hRGN,TRUE);//将创建的区域设定为窗口区域<BR>例2:多个区域叠加(布尔运算)</SPAN></FONT></P>
<P
style="LINE-HEIGHT: 100%; MARGIN-BOTTOM: 2px; MARGIN-TOP: 2px"><FONT
color=#000000 face=宋体 size=2><SPAN
style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">1、HRGN
hRGN1=CreateRoundRectRgn(0,0,200,200,20,20);//创建圆角矩形区域</SPAN></FONT></P>
<P
style="LINE-HEIGHT: 100%; MARGIN-BOTTOM: 2px; MARGIN-TOP: 2px"><FONT
color=#000000 face=宋体 size=2><SPAN
style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">2、HRGN
hRGN2=CreateRectRgn(10,10,20,20);//创建矩形区域</SPAN></FONT></P>
<P
style="LINE-HEIGHT: 100%; MARGIN-BOTTOM: 2px; MARGIN-TOP: 2px"><FONT
color=#000000 face=宋体 size=2><SPAN
style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">3、HRGN
hRGN; CombineRgn(hRGN,hRGN1,hRGN2,RGN_DIFF);</SPAN></FONT></P>
<P
style="LINE-HEIGHT: 100%; MARGIN-BOTTOM: 2px; MARGIN-TOP: 2px"><FONT
color=#000000 face=宋体 size=2><SPAN
style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
//使用区域1减区域2,生成新区域hRGN(可选的参数有加,减,交等,详见MSDN)</SPAN></FONT></P>
<P
style="LINE-HEIGHT: 100%; MARGIN-BOTTOM: 2px; MARGIN-TOP: 2px"><FONT
color=#000000 face=宋体 size=2><SPAN
style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">4、SetWindowRgn(hRGN,TRUE);//将创建的区域设定为窗口区域</SPAN></FONT></P></TD></TR>
<TR>
<TD bgColor=#66ccff width="100%"><FONT color=#000000 face=宋体
size=2><SPAN
style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">B.位图区域方式创建不规则窗口
<A
href="http://go.163.com/~heavenandearth/vc/rgn.zip">点击此处下载BitmapToRegion函数代码rgn.zip:1.95
KB (2,002 字节)</A></SPAN></FONT></TD></TR>
<TR>
<TD width="100%">
<P
style="LINE-HEIGHT: 100%; MARGIN-BOTTOM: 2px; MARGIN-TOP: 2px"><FONT
color=#000000 face=宋体 size=2><SPAN
style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">1、HBITMAP
hBmp=(HBITMAP)LoadImage(应用程序句柄, 位图文件名, IMAGE_BITMAP, 宽度, 高度,
LR_LOADFROMFILE);</SPAN></FONT></P>
<P
style="LINE-HEIGHT: 100%; MARGIN-BOTTOM: 2px; MARGIN-TOP: 2px"><FONT
color=#000000 face=宋体 size=2><SPAN
style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
//载入一个位图,该位图中的某个特定颜色将被作为透明区域处理</SPAN></FONT></P>
<P
style="LINE-HEIGHT: 100%; MARGIN-BOTTOM: 2px; MARGIN-TOP: 2px"><FONT
color=#000000 face=宋体 size=2><SPAN
style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">2、HRGN
hRGN=BitmapToRegion(hBmp,RGB(255,0,0),0);//调用位图转换为区域的函数,透明色为红色,第三个参数为公差,为0即只将红色设定为透明色。如果公差为1,意味着与给定透明色的红绿蓝三色数值的差距在1范围内的颜色也将被作为透明色处理。</SPAN></FONT></P>
<P
style="LINE-HEIGHT: 100%; MARGIN-BOTTOM: 2px; MARGIN-TOP: 2px"><FONT
color=#000000 face=宋体 size=2><SPAN
style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">3、SetWindowRgn(hRGN,TRUE);//将创建的区域设定为窗口区域<BR>说明:关于BitmapToRegion函数,它的功能就是将位图转换为区域,原理来自API:
ExtCreateRegion,该函数使用RGNDATA结构中的数据创建RGN,本函数就是分析位图的各个像素点数,根据它们填充RGNDATA结构,然后创建RGN的。</SPAN></FONT></P></TD></TR></TBODY></TABLE>
<P
style="LINE-HEIGHT: 100%; MARGIN-BOTTOM: 2px; MARGIN-TOP: 2px"><FONT
color=#000000 face=宋体 size=2><SPAN
style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">由于不规则窗口专题比较简单,没有提供完整的范例,B方法的关键是BitmapToRegion函数,所以只提供了该函数的代码。如果还有</SPAN></FONT><FONT
color=#000000 face=宋体 size=2><SPAN
style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman; mso-bidi-font-family: Times New Roman; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">不清楚的地方或者想要完整的范例,<A
href="mailto:breath@china.com">请与我联系</A>。</SPAN></FONT></P><BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR>
<TABLE align=center bgColor=#006699 border=0 cellPadding=0 cellSpacing=0
width=770>
<TBODY>
<TR bgColor=#006699>
<TD align=middle bgColor=#006699 id=white><FONT
color=#ffffff>对该文的评论</FONT></TD>
<TD align=middle>
<SCRIPT src="CSDN_文档中心_用Win32 API创建不规则窗口.files/readnum.htm"></SCRIPT>
</TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16
hspace=1 src="CSDN_文档中心_用Win32 API创建不规则窗口.files/ico_pencil.gif" width=16>
</SPAN> 111222 <I>(2001-1-23 9:14:50)</I> </TD></TR>
<TR>
<TD bgColor=#ffffff colSpan=3 width=532><BR>?? <BR></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16
hspace=1 src="CSDN_文档中心_用Win32 API创建不规则窗口.files/ico_pencil.gif" width=16>
</SPAN> 111222 <I>(2001-1-23 9:14:00)</I> </TD></TR>
<TR>
<TD bgColor=#ffffff colSpan=3 width=532><BR>我想要完整示例代码,可以邮给我么?
111222@0451.com <BR></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16
hspace=1 src="CSDN_文档中心_用Win32 API创建不规则窗口.files/ico_pencil.gif" width=16>
</SPAN> breath <I>(2000-12-29 20:31:46)</I> </TD></TR>
<TR>
<TD bgColor=#ffffff colSpan=3 width=532><BR>今天收到csdn网友的信说无法下载,就又改了一下
<BR></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16
hspace=1 src="CSDN_文档中心_用Win32 API创建不规则窗口.files/ico_pencil.gif" width=16>
</SPAN> breath <I>(2000-12-26 21:10:23)</I> </TD></TR>
<TR>
<TD bgColor=#ffffff colSpan=3 width=532><BR>直接贴的HTML,可惜了
<BR></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16
hspace=1 src="CSDN_文档中心_用Win32 API创建不规则窗口.files/ico_pencil.gif" width=16>
</SPAN> Dosn <I>(2000-12-23 0:57:32)</I> </TD></TR>
<TR>
<TD bgColor=#ffffff colSpan=3 width=532><BR>这篇文章是怎么打的,字都叠在一起了???
<BR></TD></TR></TBODY></TABLE><BR>
<DIV align=center>
<TABLE align=center bgColor=#cccccc border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TH bgColor=#006699 id=white><FONT
color=#ffffff>我要评论</FONT></TH></TR></TBODY></TABLE></DIV>
<DIV align=center>
<TABLE border=0 width=770>
<TBODY>
<TR>
<TD>你没有登陆,无法发表评论。 请先<A
href="http://www.csdn.net/member/login.asp?from=/Develop/read_article.asp?id=2365">登陆</A>
<A
href="http://www.csdn.net/expert/zc.asp">我要注册</A><BR></TD></TR></TBODY></TABLE></DIV><BR>
<HR noShade SIZE=1 width=770>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=500>
<TBODY>
<TR align=middle>
<TD height=10 vAlign=bottom><A
href="http://www.csdn.net/intro/intro.asp?id=2">网站简介</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=5">广告服务</A> - <A
href="http://www.csdn.net/map/map.shtm">网站地图</A> - <A
href="http://www.csdn.net/help/help.asp">帮助信息</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=2">联系方式</A> - <A
href="http://www.csdn.net/english">English</A> </TD>
<TD align=middle rowSpan=3><A
href="http://www.hd315.gov.cn/beian/view.asp?bianhao=010202001032100010"><IMG
border=0 height=48 src="CSDN_文档中心_用Win32 API创建不规则窗口.files/biaoshi.gif"
width=40></A></TD></TR>
<TR align=middle>
<TD vAlign=top>百联美达美公司 版权所有 京ICP证020026号</TD></TR>
<TR align=middle>
<TD vAlign=top><FONT face=Verdana>Copyright © CSDN.net, Inc. All rights
reserved</FONT></TD></TR>
<TR>
<TD height=15></TD>
<TD></TD></TR></TBODY></TABLE></DIV>
<DIV></DIV><!--内容结束//--><!--结束//--></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -