⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 10.html

📁 写给JSP初级程序员的书
💻 HTML
📖 第 1 页 / 共 2 页
字号:
      NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//  
      锁定绘图表面<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lock =  
      ds-&gt;Lock(ds);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assert((lock  
      &amp; JAWT_LOCK_ERROR) ==  
      0);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//  
      获取绘图表面的信息<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dsi =  
      ds-&gt;GetDrawingSurfaceInfo(ds);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//  
      获取特定平台的绘图信息<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dsi_win =  
      (JAWT_Win32DrawingSurfaceInfo*)dsi-&gt;platformInfo;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HDC  
      hdc =  
      dsi_win-&gt;hdc;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HWND  
      hWnd =  
      dsi_win-&gt;hwnd;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//////////////////////////////<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//  
      !!! 在此处进行绘图 !!!  
      //<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//////////////////////////////<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(hrgn  
      ==  
      NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RECT  
      rcBounds;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetWindowRect(hWnd,&amp;rcBounds);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long  
      xLeft = 0; //  
      用于缩放宏<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long  
      yTop =  
      0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long  
      xScale =  
      rcBounds.right-rcBounds.left;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long  
      yScale =  
      rcBounds.bottom-rcBounds.top;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hrgn  
      = CreateEllipticRgn(X(10), Y(15), X(90),  
      Y(95));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetWindowRgn(GetParent(hWnd),hrgn,TRUE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InvalidateRect(hWnd,NULL,TRUE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
      else  
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DrawSmiley(hWnd,hdc);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//  
      释放绘图表面的信息<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds-&gt;FreeDrawingSurfaceInfo(dsi);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//  
      为绘图表面解锁<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds-&gt;Unlock(ds);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//  
      释放绘图表面<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;awt.FreeDrawingSurface(ds);<BR>}<BR><BR>void  
      DrawSmiley(HWND hWnd, HDC  
      hdc)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RECT  
      rcBounds;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetWindowRect(hWnd,&amp;rcBounds);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long  
      xLeft = 0; //  
      用于缩放宏<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long yTop =  
      0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long xScale =  
      rcBounds.right-rcBounds.left;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long  
      yScale =  
      rcBounds.bottom-rcBounds.top;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//  
      基于控制大小的画笔宽度<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int  
      iPenWidth = max(CX(5),  
      CY(5));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HBRUSH  
      brushBlack;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HBRUSH  
      brushYellow;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HPEN  
      penBlack = CreatePen(PS_SOLID, iPenWidth,  
      RGB(0x00,0x00,0x00));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//  
      用于绘制填充椭圆的空画笔<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HPEN  
      penNull = CreatePen(PS_NULL, 0,  
      (COLORREF)0);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;brushBlack  
      =  
      CreateSolidBrush(RGB(0x00,0x00,0x00));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;brushYellow  
      =  
      CreateSolidBrush(RGB(0xff,0xff,0x00));<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HPEN  
      pPenSave = (HPEN)SelectObject(hdc,  
      penBlack);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HBRUSH  
      pBrushSave =  
      (HBRUSH)SelectObject(hdc,brushYellow);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ellipse(hdc,X(10),  
      Y(15), X(90), Y(95)); //  
      头部<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Arc(hdc,X(25),  
      Y(10), X(75), Y(80), //  
      嘴部(微笑)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;X(35),  
      Y(70), X(65),  
      Y(70));<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SelectObject(hdc,&amp;penNull);  
      //  
      无绘图宽度<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SelectObject(hdc,&amp;brushBlack);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ellipse(hdc,X(57),  
      Y(35), X(65),  
      Y(50));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ellipse(hdc,X(35),  
      Y(35), X(43), Y(50)); //  
      右眼<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ellipse(hdc,X(46),  
      Y(50), X(54), Y(65)); //  
      鼻子<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetBkMode(hdc,TRANSPARENT);  
      //  
      使用前景颜色<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SelectObject(hdc,pBrushSave);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SelectObject(hdc,pPenSave);<BR>}<BR></CODE>
      <P>这里的关键数据结构是 <CODE>JAWT</CODE>,它是在 <CODE>jawt.h</CODE> 中定义的(通过  
      <CODE>jawt_md.h</CODE> 包含在内)。它使程序可以访问本地代码在基于 Java 的 GUI  
      组件上绘图所需的所有信息。本地方法的第一部分是套式:置入 <CODE>JAWT</CODE> 结构,获得一个  
      <CODE>JAWT_Win32DrawingSurfaceInfo</CODE> 结构,锁定表面(请一次只使用一种绘图工具!),然后,获取一个  
      <CODE>JAWT_DrawingSurfaceInfo</CODE> 结构,该结构包含特定平台下绘图所必需的指针(在  
      <CODE>platformInfo</CODE>字段中)。它也包含绘图界面的矩形界限框及当前剪切区域。有关详细信息,请查看  
      <CODE>jawt.h</CODE> 和 <CODE>jawt_md.h</CODE> (请参阅下面标题为 “构建环境”的部分)。  
      <P><CODE>Java_MyWindow_paint</CODE> 是一个入口点,JVM 通过调用它来绘制  
      <CODE>MyWindow</CODE>。辅助函数 <CODE>DrawSmiley</CODE> 使用 Win32  
      调用来完成实际的绘制工作。要在您的应用程序中包含 <CODE>GetDrawingSurfaceInfo</CODE>,请使用外部库  
      <CODE>jawt.lib</CODE>(请参阅 “构建环境”)。  
      <P><FONT size=+1><STRONG>第四步:编辑 BUILD.BAT</STRONG></FONT><BR>在运行  
      <CODE>BUILD.BAT</CODE> 之前首先对它进行编辑,并像如下所示的那样,为您的 Visual C++ 及 JDK1.3  
      设置路径。<CODE>BUILD.BAT</CODE> 对 <CODE>MyWindow.java</CODE> 进行编译,生成  
      <CODE>MyWindow.h</CODE>,然后将 <CODE>MyWindow.CPP</CODE> 编译为  
      <CODE>MyWindow.DLL</CODE>。 
      <P><CODE>SET DEVSTUDIO=D:\Program Files\Microsoft Visual  
      Studio\VC98<BR>SET JDK13=D:\JDK1.3<BR></CODE> 
      <P>好了,一切准备就绪。在运行该样例之前,请确保  
      <CODE>MyWindow.DLL</CODE>、<CODE>\JDK1.3\BIN</CODE> 及  
      <CODE>\JDK1.3\JRE\BIN</CODE> 都在 <CODE>PATH</CODE> 内,还要保证当前目录在  
      <CODE>CLASSPATH</CODE> 中;这将确保 <CODE>MyWindow.class</CODE> 会被成功加载。在确信  
      <CODE>PATH</CODE> 和 <CODE>CLASSPATH</CODE> 都设置妥当后,在命令行输入 <CODE>java  
      MyWindow</CODE> 来运行此应用程序。为方便您的使用,<CODE>window.zip</CODE> 中包含了一个批处理文件  
      <CODE>RUN.BAT</CODE>(请参阅<A 
      href="http://www.cn.ibm.com/developerWorks/java/jw-tips/tip086/index.shtml#resources">参考资源</A>)。要为  
      JDK 1.3 设置<CODE>PATH</CODE> 和 <CODE>CLASSPATH</CODE>,请编辑  
      <CODE>RUN.BAT</CODE>。 
      <P><FONT size=+1><STRONG>构建环境</STRONG></FONT><BR>
      <UL>
        <LI><STRONG>头文件:</STRONG>在 JDK 的 include 目录中新增了专用于 Windows 的 C 头文件。它们是:  
        <P><CODE>&nbsp;&nbsp;include/jawt.h.<BR>&nbsp;&nbsp;include/win32/jawt_md.h.<BR></CODE>
        <P>依据 JavaSoft 网站的说明,这些头文件并不是 Java 2  
        平台正式规范的组成部分;提供这些头文件只是为希望用一种标准化方法访问本地绘图功能的开发人员提供一种便利。我认为这表示将 JDK  
        移植到其它平台的厂商可以不提供这个 API。  
        <P></P>
        <LI><STRONG>库:</STRONG>一个以 <CODE>jawt.lib</CODE> 命名的新库已添加到 SDK  
        的库目录中。如前所述,这个库包含一个用于把 J2AWT 包含到您的应用程序中所需要的入口点。例如,要链接到  
        <CODE>GetDrawingSurfaceInfo</CODE> 入口点,您需要在您的程序中包含  
        <CODE>jawt.lib</CODE>。 
        <P></P>
        <LI><STRONG>工具:</STRONG><CODE>javah</CODE> 工具用来为 Java 类的本地函数生成 C/C++  
        头文件,<CODE>javac</CODE> 工具用来编译 Java 源文件。  
        <P></P></LI></UL>
      <P><FONT size=+1><STRONG>小结</STRONG></FONT><BR>将原有软件系统移植到 Java  
      中并不容易,尤其是当原有软件包含高性能的绘图器时。Java 2 AWT  
      本地接口使得分阶段移植变得较为容易,它允许您首先移植对性能要求不高的代码,然后再移植关键的绘制代码。它同时使第三方窗口小部件开发厂商更能严肃地看待针对  
      Java 产品的开发。有了 Java 2 AWT 本地应用程序接口,您就可以移植原有的 GUI  
      代码,并更快地完成开发,这样就不会牺牲您为提高本地代码关键部分的性能而作的投资。 <!-- end body text --> 
      <P><A name=bio>
      
        <TBODY>
        <TR>
          <TD vAlign=top><STRONG><FONT 
            size=-1>作者简介 </FONT></STRONG><BR></a><A 
            href="mailto:davanum.srinivas@javaworld.com">Davanum Srinivas</A> 
            目前在 <A href="http://www.cai.com/">Computer Associates</A>  
            公司从事软件开发工作。 </TD></TR></TBODY><P><A name=resources><STRONG>参考资源</STRONG></A> 
      <UL>
        <LI>本压缩文件包含本文章涉及的所有源代码和一个批处理文件: <BR><A 
        href="window.zip">window.zip</A> 

        <LI>Sun 公司对 AWT 本地接口的介绍: <BR><A 
        href="http://java.sun.com/products/jdk/1.3/AWT_Native_Interface.html">http://java.sun.com/products/jdk/1.3/AWT_Native_Interface.html</A> 

        <LI>SUN 公司在 Java 2 SDK,版本 1.3 中所作的增强: <BR><A 
        href="http://java.sun.com/products/jdk/1.3/docs/guide/awt/enhancements.html">http://java.sun.com/products/jdk/1.3/docs/guide/awt/enhancements.html</A> 

        <LI>Sun 公司对本地绘图 JAWT 接口的改进,post-Kestrel(只需免费注册): <BR><A 
        href="http://developer.java.sun.com/developer/bugParade/bugs/4281429.html">http://developer.java.sun.com/developer/bugParade/bugs/4281429.html</A>
        <LI>"Enhance your Java application with Java Native Interface (JNI)," 
        TalLyron(<EM>JavaWorld,</EM>1999 年 10 月): <BR><A 
        href="http://www.javaworld.com/javaworld/jw-10-1999/jw-10-jni.html">http://www.javaworld.com/javaworld/jw-10-1999/jw-10-jni.html</A> 

        <LI>"Java Tip 23: Write native methods," John D. Mitchell 
        <EM>(JavaWorld):</EM> <BR><A 
        href="http://www.javaworld.com/javaworld/javatips/jw-javatip23.html">http://www.javaworld.com/javaworld/javatips/jw-javatip23.html</A> 
        </LI></UL>
        </td>
      </tr>
    </td>
  </tr>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -