<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>wguzgg</title>
    <description></description>
    <link>http://wguzgg.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
          <item>
        <title>在java程序中利用swt实现窗口始终最前以及透明窗口</title>
        <author>wguzgg</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wguzgg.javaeye.com">wguzgg</a>&nbsp;
                    链接：<a href="http://wguzgg.javaeye.com/blog/22614" style="color:red;">http://wguzgg.javaeye.com/blog/22614</a>&nbsp;
          发表时间: 2004年08月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          从win2000开始,windows提供了一个新的api&nbsp;&nbsp; SetLayeredWindowAttributes,可以轻松实现透明窗口,在网上有许多vb,vc,delphi的示例程序,下面我来介绍一下如何使用swt来实现这一效果:<br /><br />BOOL SetLayeredWindowAttributes(<br />HWND hwnd, // handle to the layered window<br />COLORREF crKey, // specifies the color key<br />BYTE bAlpha, // value for the blend function<br />DWORD dwFlags // action<br />);<br /><br />Windows NT/2000/XP: Included in Windows 2000 and later.<br />Windows 95/98/Me: Unsupported.<br />Header: Declared in Winuser.h; include Windows.h.<br />Library: Use User32.lib.<br /><br />一些常量:<br />WS_EX_LAYERED = 0x80000;<br />LWA_ALPHA = 0x2;<br />LWA_COLORKEY=0x1<br />其中dwFlags有LWA_ALPHA和LWA_COLORKEY<br />LWA_ALPHA被设置的话,通过bAlpha决定透明度.<br />LWA_COLORKEY被设置的话,则指定被透明掉的颜色为crKey,其他颜色则正常显示.<br />注:要使使窗体拥有透明效果,首先要有WS_EX_LAYERED扩展属性(旧sdk也没有的).<br />　<br />上面是该函数的资料,下面是一段代码示例:<br />[code:1]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; display = new Display&amp;#40;&amp;#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shell = new Shell&amp;#40;display , SWT.NULL&amp;#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shell.setMaximized&amp;#40;false&amp;#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shell.setBackground&amp;#40;display.getSystemColor&amp;#40;SWT.COLOR_BLACK&amp;#41;&amp;#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shell.setText&amp;#40;&amp;quot;Example&amp;quot;&amp;#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shell.setBounds&amp;#40;0 , 700 , 1024 , 68&amp;#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //始终最前<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OS.SetWindowPos&amp;#40;shell.handle , OS.HWND_TOPMOST, 0 , 700 , 1024 , 68 , SWT.NULL&amp;#41;;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //透明窗体<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OS.SetWindowLong&amp;#40;shell.handle , OS.GWL_EXSTYLE , OS.GetWindowLong&amp;#40;shell.handle , OS.GWL_EXSTYLE&amp;#41;^0x80000&amp;#41;;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TCHAR lpLibFileName = new TCHAR &amp;#40;0, &amp;quot;User32.dll&amp;quot;, true&amp;#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int hInst = OS.LoadLibrary&amp;#40;lpLibFileName&amp;#41;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&amp;#40;hInst != 0&amp;#41; &amp;#123; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String name = &amp;quot;SetLayeredWindowAttributes\0&amp;quot;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte &amp;#91;&amp;#93; lpProcName = new byte &amp;#91;name.length &amp;#40;&amp;#41;&amp;#93;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for &amp;#40;int i=0; i&amp;lt;lpProcName.length; i++&amp;#41; &amp;#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpProcName &amp;#91;i&amp;#93; = &amp;#40;byte&amp;#41; name.charAt &amp;#40;i&amp;#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int fun = OS.GetProcAddress&amp;#40;hInst , lpProcName&amp;#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if &amp;#40;fun != 0&amp;#41; &amp;#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OS.CallWindowProc&amp;#40;fun , shell.handle , 0,50,1&amp;#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OS.FreeLibrary&amp;#40;hInst&amp;#41;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;#125;<br />[/code:1]<br />里面用到的几个类都在org.eclipse.swt.internal.win32下,相信大家看到上面的代码就都清楚该如何做了,我也就不多罗嗦了.
          <br/><br/>
          <span style="color:red;">
            <a href="http://wguzgg.javaeye.com/blog/22614#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 23 Aug 2004 16:23:26 +0800</pubDate>
        <link>http://wguzgg.javaeye.com/blog/22614</link>
        <guid>http://wguzgg.javaeye.com/blog/22614</guid>
      </item>
          <item>
        <title>test</title>
        <author>wguzgg</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wguzgg.javaeye.com">wguzgg</a>&nbsp;
                    链接：<a href="http://wguzgg.javaeye.com/blog/22594" style="color:red;">http://wguzgg.javaeye.com/blog/22594</a>&nbsp;
          发表时间: 2004年08月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          test
          <br/><br/>
          <span style="color:red;">
            <a href="http://wguzgg.javaeye.com/blog/22594#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 12 Aug 2004 11:41:18 +0800</pubDate>
        <link>http://wguzgg.javaeye.com/blog/22594</link>
        <guid>http://wguzgg.javaeye.com/blog/22594</guid>
      </item>
      </channel>
</rss>