<?xml version="1.0" encoding="UTF-8" ?>
<messages>
  <message id="template">
    <div id="top_wrapper">
      <div id="top_content">
	${languages}
	<div id="top_wt">
	  <a href="http://www.emweb.be/">
	    <img src="/css/wt/emweb_powered.jpg" alt="Emweb" height="22" />
	  </a>
	</div>
      </div>
    </div>

    <div id="banner_wrapper">
      <div id="banner_content">
	<div id="banner_end"> <div id="banner"><a href="#">Wt</a></div> </div>
      </div>
    </div>

    <div id="main_wrapper" class="home">
      <div id="main_content">
	<div id="main_menu">
	  ${menu}
	  ${sidebar}
	</div>
	${contents}

	<div class="clearall"></div>
      </div>
    </div>

    <div id="footer_wrapper">
      <div id="footer_content">
	<div id="footer_copyright"> 
	  <a href="http://www.emweb.be/">
	    <img src="/css/wt/emweb_large.jpg" height="25" width="101"
		 alt="Emweb.be" title="emweb.be"/></a>
	  基于WEB的应用系统解决方案<br/>
	  <a href="http://www.emweb.be/">www.emweb.be</a>
	</div>

	<div id="footer_menu"> 
	  <a href="http://www.webtoolkit.eu/wt/">首页</a>
	  | <a href="http://www.emweb.be/contact">联系我们</a>
	</div>

	<div id="chat"></div>
	<script src="http://www.webtoolkit.eu/wt/examples/simplechat/chat.js?div=chat" type="text/javascript"></script>

	<div class="clearall"></div>
      </div>
      <script type="text/javascript">
	    /*<![CDATA[*/
            window.pageTracker = null;
            loadScript("http://www.google-analytics.com/ga.js", function() {
              window.pageTracker = _gat._getTracker('UA-4345578-1');
              window.pageTracker._initData();
              window.pageTracker._trackPageview();
            });
            /* ]]> */
      </script>
    </div>
  </message>

  <message id="wt">Wt，C++ 网络开发工具包</message>

  <message id="introduction">简介</message>
  <message id="blog">博客</message>
  <message id="features">特点</message>
  <message id="documentation">文档</message>
  <message id="examples">示例</message>
  <message id="download">下载</message>
  <message id="community">社区</message>
  <message id="other-language">!C++</message>

  <message id="hello-world">Hello world</message>
  <message id="charts">图表示例</message>
  <message id="wt-homepage">Wt网站示例</message>
  <message id="treeview">树视图</message>
  <message id="git">Git查看器</message>
  <message id="chat">简单聊天示例</message>
  <message id="mail-composer">邮件编辑器</message>
  <message id="widget-gallery">Widget展示库</message>

  <message id="home.news">
    <h3><span>新闻</span></h3>
  </message>
  <message id="home.latest-news">
    <h4><span>最新消息</span></h4>
  </message>
  <message id="home.historical-news">
    <h4><span>重要消息</span></h4>
  </message>

  <message id="source-browser-link">
    <a href="{1}">查看源代码</a>
  </message>

  <message id="src-title">
    <div>
    </div>
  </message>

  <message id="home.intro">

<h3><span>Wt：简介</span></h3>

<p>Wt(音同'witty')是一个C++库，用以开发交互性Web应用。</p>

<p>Wt的API<b>以widget为中心</b>，将桌面GUI APIs的良好测试模式引入Web开发。
Wt为开发者提供了几乎所有Web实现细节的抽象，其中包括事件处理、图像支持、
优雅降级（或渐进增强）、及良好的URL处理。</p>

<p>与其他诸多基于页面的开发框架相比，Wt可以创建状态化的应用，同时
实现了高度的交互性和可访问性；其交互性体现在Wt可以综合使用各种技术，
如Ajax等；其可访问性体现在Wt可以使应用在必要的时候支持纯HTML浏览器；
这些特性的获得充分利用了自动的<b>优雅降级或渐进增强</b>。</p>

<p>Wt库还自带了应用服务器程序，可配置为独立的Web服务器，当然也允许
通过FastCGI连同其他Web服务器进行整合。</p>

<h4>交互性、安全性、可访问性</h4>

<p>基于页面的开发框架（如PHP、JSP/JSF、Ruby on Rails等）没有实现底层基础
技术的抽象，这些技术包括HTML/XHTML、JavaScript、CSS、Ajax、Forms、DHTML
、SVG/VML/Canvas等。显然，基于页面的开发框架必须要求开发者随时熟悉和掌握
这些基本技术，同时当浏览器不支持时，还要为应用的优雅降级负责。另外，如果
应用采取早期HTML页面为中心的设计模式，开发者不仅要实现控制器以告诉用户如何
从一个页面跳转到另一个页面，而且还要在采用一些高级Ajax技术时手工设计和维护
客户端与服务器端的通讯。</p>

<p>另一方面，就算是纯粹的Ajax框架，也要求开发者通过繁杂的JavaScript编程来
处理浏览器的怪异行为和客户端与服务器端间的安全通讯，这些处理任何人都不能
跳过去不与理会。同时，这些应用通常不能符合可访问性的原则，也不能很好被搜索
机器人索引到。</p>

<p>安全方面，生成HTML或填充HTML模版很容易导致安全问题，如<a 
href="http://en.wikipedia.org/wiki/Cross-site_scripting">跨站脚本（XSS）
</a>和<a href="http://en.wikipedia.org/wiki/Cross-site_request_forgery">
跨站请求伪造（CSRF）</a>；XSS问题一般由（疏忽）允许嵌入JavaScript代码引起，
CSRF问题一般由（相信）Cookies（可）作为认证手段引起。作为开发者，
这些安全问题将是很难避免的，因为我们有时需要允许用户插入自己的JavaScript
代码来实现某些功能，但开发框架本身却没提供给我们过滤机制。</p>

<p>相反，使用Wt来部署Web应用可以完全用C++来开发，Wt自动产生所必须的
HTML/XHTML、CSS、Javascript、CGI、SVG/VML/Canvas和Ajax代码；与此同时，
代码的安全性和浏览器兼容性等问题都将转交给Wt。例如，在可能的情况下，
Wt将最大限度的使用JavaScript和Ajax，但在Ajax功能受限时，Wt也能保证
系统功能运行正常。其原理是Wt将先启用纯HTML/CGI应用，随后在可能的情况
下渐进增强至Ajax应用。另外，Wt提供了内置的安全性考虑。</p>

<h4>典型应用举隅：</h4>

<ul>
  <li>由于Wt C++ Web应用服务器占用较小的物理空间，故而可以为<b>嵌入式系统</b>
  提供基于Web的GUIs；</li>

  <li>Wt可以为需要<b>整合现有C++库</b>的应用提供基于Web的GUIs, 这些
  应用可能包括科学上的或工程上的应用；</li>

  <li>Wt可以创建从<b>现有C++桌面应用</b>到Web的有效渠道；</li>

  <li>Wt还可以应用于一些<b>高性能、复杂的</b>Web应用，这样的应用
  一般具有高度定制、充分利用Ajax的特点，同时具有完全的可访问性和较高的
  搜索引擎优化(SEO)需求</li>
</ul>

<h4>使用Wt的其他好处</h4>

<ul>
  <li>可以使用我们熟悉的桌面GUI模式开发Web应用；</li>

  <li>Wt为我们提供了广阔的widgets集，这些widgets可以在环境不支持
  JavaScript的情况下照常工作（当然，如果支持则效果更佳）；</li>

  <li>在Wt中客户端与服务器端的验证和事件处理采用同一规范；</li>

  <li>Wt允许开发者选择XHTML和CSS来进行布局和样式编辑；</li>

  <li>Wt可生成标准的、兼容的HTML或XHTML代码；</li>

  <li>Wt采用内联VML、内联SVG、HTML 5 画布或PNG可生成应用于Web的可移植的、
  反锯齿的图像，当然这些图像还可以轻松渲染为PDF格式；</li>

  <li></li>

  <li>Wt可以避免常见的安全问题，因为Wt拥有对表示层的完全控制，并能够主动
  过滤掉<i>处于活动状态的</i>标签和属性；Wt同时实现了业务逻辑的隐藏，并
  通过状态化的设计简化了认证机制；</li>

  <li>基于Wt的应用的载入时间极短且占用带宽也很低，究其原因是Wt中这些特点
  仅受限于页面显示的复杂程度，而不是应用程序自身的尺寸；Wt还实现了所有的
  常用技巧和方法，以优化应用的快速反应，Wt几乎做到了针对所有浏览器的优化；</li>

  <li>Wt提供了服务器端初始的事件处理，即<i>服务器推</i>或<i>Comet</i>，
  这部分API使用简单、稳定且在所有浏览器上均能实现；</li>

  <li>Wt在服务器部署上，既可以使用内置的httpd，又可以使用FastCGI/ISAPI，
  当然前者实施起来更简便易行。</li>
</ul>

  </message>
  <message id="home.features">

<h3><span>特点</span></h3>

<h4>核心库特点</h4>

<ul>
  <li>支持所有主流浏览器（包括Firefox/Gecko、Internet Explorer、Safari、
	Chrome、Konqueror以及Opera），同时在纯HTML浏览器上亦能正常工作
	（已经测试过的有Links和Lynx）；</li>

  <li>既可以在Unix/GNU Linux（gcc）上开发和部署，又可以在MS Windows
   （Visual Studio）上；</li>

  <li>Wt利用优雅降低与渐进增强可以保证应用在有无JavaScript或Ajax支持
	的情况下动作行为尽可能一致（渐进增加须使用渐进启动方法）；</li>

  <li>Wt整合了Unicode支持（UTF8/UTF16），便于全面实现本地化；</li>

  <li>当Ajax获得支持时，基于Wt的应用只有变化才被渲染；</li>

  <li>在Wt中，页面变化有可见变化和背景中不可见变化两类，当Ajax被支持时，
	两类都会得到渲染，而当Ajax不被支持时，只有可见内容的变化被渲染；</li>

  <li>Wt中的会话跟踪选项是可以按需配置的，主要包括URL重写和Cookies两种；</li>

  <li>Wt中纯HTML页面或Ajax会话的动作行为是统一的，因此Wt支持浏览器历史
	导航操作（向后、向前按钮和书签），可生成良好URL地址，利于搜索引擎
	优化工作；</li>

  <li>Wt拥有高性能的特点，允许部署在低端嵌入式设备上，或者部署在所用功耗、
	物理空间、经费预算等相对平衡的Internet或extranet网站上；</li>

  <li>Wt采用了完全基于事件驱动的异步I/O机制：会话不用绑定于线程，也不会延迟应答
	（如服务器推）或锁定线程；相反，线程只会被用来提高并发请求处理或事件循环
	的重新进入。</li>
</ul>

<h4>事件处理</h4>

<ul>
  <li>Wt使用类型安全的、基于模版的信号/槽系统来处理事件；</li>
  <li>支持对键盘、鼠标及焦点事件的监听，同时可以获得事件细节，比如鼠标键位、
    键盘键位等；</li>
  <li>自动同步表单数据；</li>
  <li>Wt通过无状态槽实现获得了C++至JavaScript的动态转换；在此，单一C++槽的实现
	提供了客户端和服务器端双重事件处理：即客户端实现显示的变化，服务器端实现
	应用状态的变化；</li>
  <li>Wt还提供了面向开发者自定义的JavaScript代码的钩技术，比如让原本仅用于客户端
	  事件处理的JavaScript代码在执行后释放出C++信号；</li>
  <li>Wt提供了拖放API；</li>
  <li>Wt支持定时事件，同时内置支持服务器端初始更新（“服务器推”）。</li>
</ul>

<h4>原生的绘图系统</h4>

<ul>
  <li>Wt提供统一的绘图API，此系统使用了浏览器原生的（向量）图像支持
	（如内联VML、内联SVG、HTML 5画布），也可以渲染到通用的图片格式
	（如PNG、GIF等等）或向量格式（如SVG、PDF等）；</li>
  <li>Wt支持任意画笔路径、裁剪、输入文本、图像、变形、投影等</li>
  <li>使用绘图API可以绘制widget，或者创建SVG、PDF及PNG/GIF图像。</li>
</ul>

<h4>GUI组件</h4>

具体可进入<a href="http://www.webtoolkit.eu/widgets">Widget展示库</a>
进行交互式体验。

<h4>内置安全性</h4>

<ul>
  <li>Wt采用Kernel级的内存保护方案，特别是在采用专属进程模式下，
    会话之间完全隔离，这样Wt完全可以保护隐私数据免受程序错误的影响；</li>
  <li>Wt使用安全套接字协议层（SSL）或传输层安全协议（TLS）通过HTTPS
	来支持加密和服务器认证；</li>
  <li>Wt满足低带宽下HTTPS持续使用的各种需求（细粒度Ajax）；</li>
  <li>Wt提供内置跨站脚本（XSS）保护，通过预先过滤掉渲染文本中的恶意代码，
	使Wt应用免受XSS的攻击；</li>
  <li>Wt应用能够对跨站请求伪造（CSRF）有一定的防护，因为用于会话跟踪的
	Cookies是可选的，即使是如此，Cookies也永远不会严格依赖于触发事件处理代码
	的请求；</li>
  <li>Wt对跳过特定URL而对应用逻辑的破坏也有一定的防护，因为只有界面
	明确的事件才会被触发；</li>
</ul>

<h4>对象关系映射库</h4>

Wt提供了Wt::Dbo，这是Wt自带的一个库，实现了对象关系映射，Wt::Dbo为C++
应用程序与SQL数据库之间的提供了一种方便的处理方法。虽然我们说Wt::Dbo拥有的
一些特点，如最佳并发控制等，使这一技术成为数据库驱动的Web应用的理想选择
（当然与Wt的MVC框架结合最佳），但我们还要说Wt::Dbo还可以被用在离线应用
或其他非Wt的应用中。

Wt的ORM库（教程参见<a
href="http://www.webtoolkit.eu/wt/doc/tutorial/dbo/tutorial.html">此处</a>）
有如下特点：

<ul>
  <li>没有所谓代码生成、没有宏、没有XML配置，仅面向C++！</li>
  <li>使用模板化的访问者模式，该模式要求单一模版方法以提供映射，也就是
	常说的“不要重复”（DRY）或尽最大可能高效！</li>
  <li>在该库中，你可以指定代理自增键，或映射任意C++类型的自然键，当然也
	可以是组合类型（例如，当需要不止一个数据库字段时）；</li>
  <li>支持<a
    href="http://en.wikipedia.org/wiki/Optimistic_concurrency_control">
	最佳并发控制</a>（利用版本字段）</li>
  <li>Dbo支持多对一和多对多关系到标准模板库（兼容）集合的映射</li>
  <li>支持模式生成（即数据定义语言DDL）和CRUD操作（即数据操作语言DML）；</li>
  <li>Dbo使用了预备语句；</li>
  <li>每个会话都会追踪脏对象并提供第一层缓存；</li>
  <li>提供灵活的、针对单个字段、对象以及他们组合（使用Boost.Tuple）的查询；</li>
  <li>使用单个连接或多个会话间共享连接池，这些连接只有当交互处于活动状态时
	才被使用；</li>
  <li>Dbo默认支持Sqlite3和PostgreSQL后端，同时<a
	href="http://wtdbomysql.sourceforge.net/">MySQL后端(GPL协议)</a>
    正由社区爱好者开发和维护（作者Paul Harisson）。</li>
</ul>

<h4>测试</h4>

Wt使用事件处理代码构建和操作widget树，因此这很容易使用测试代码检查，
所以Wt的<a href="
http://webtoolkit.eu/wt/doc/reference/html/classWt_1_1Test_1_1WTestEnvironment.html">
测试环境</a>允许你的应用实例化，且允许在没有浏览器的情况下模拟事件处理，
这样我们可以缩减底层请求/应答循环的测试环节。

<h4>部署方式</h4>

<p>
Wt库将不同的部署选项抽象为连接器库，连接器库将Wt连接到不同的外部环境，
选择部署方式（选项）其实就是将Wt应用连接或重连接到某个连接库上。
</p>

<h5>a) 内置httpd部署</h5>

<ul>
  <li>该模式下Wt是简单、且适合于基于C++ asio库的高性能Web应用服务器
	（支持多线程、异步输入输出）；</li>
  <li>既支持HTTP，也支持OpenSSL下的HTTPS；</li>
  <li>支持应答分割与压缩；</li>
  <li>支持单一进程（方便部署和调试），也方便嵌入已有应用；</li>
  <li>支持通过代理或为了均衡负载的web服务器端部署；</li>
  <li>既可以部署于UNIX平台、又可部署于Win32。</li>
</ul>

<h5>b) FastCGI部署</h5>

<ul>
  <li>该模式能与多数通用web服务器(如apache, lighttpd)整合在一起；</li>
  <li>提供不同的会话-进程映射策略；</li>
  <li>支持热部署，即新会话使用新的应用版本，同时部署时未终止的旧会话仍可以
	按旧的应用版本继续运行；</li>
  <li>该模式仅用于UNIX平台。</li>
</ul>

<h5>c) ISAPI部署</h5>

<ul>
  <li>该模式整合了Microsoft IIS服务器；</li>
  <li>使用ISAPI异步API使性能最大化；</li>
  <li>仅用于Win32平台。</li>
</ul>
  </message>
  <message id="home.examples">

<h3><span>示例</span></h3>

<p>欢迎浏览Wt的一些在线示例。</p>

<p>
  这些示例的源代码均包含在Wt的源代码发行包中。你可以通过每个示例下的
  <a href="#/src">源代码浏览器</a>查看。
</p>

<p>
  示例源代码也以交叉链接的形式出现在
  <a href="http://www.webtoolkit.eu/wt/doc/examples/html/modules.html" target="_blank">
  Wt示例doxygen文档中</a>(自动开启新窗口)。
</p>

  </message>
  <message id="home.examples.hello">
<div>
<h4 class="example">Hello world!</h4>

<p>
  <a href="http://www.webtoolkit.eu/wt/examples/hello/hello.wt" class="run" target="_blank">
    <img src="icons/green-play.png" style="vertical-align: top"/>运行该示例
  </a>
</p>

<p>这个简单的例子展示了Wt的基本概念：</p>
<ul>
  <li>
	如何创建一个最小的Wt应用，如何使用<b>WRun()</b>启动web服务器，以及
    如何创建一个新的<a
    href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WApplication.html"
    target="_blank">WApplication</a>实例（新会话）；
  </li>
  <li>
    <b>如何创建widgets</b>，以及如何将其添加到<b>widgets树</b>；
  </li>
  <li>
    如何使用<b>信号/槽</b>机制对事件做出反应；
  </li>
  <li>
    如何读取用户输入和更新widgets树。
  </li>
</ul>

<p>对hello world示例的完整阐述请参见由Victor Venkman撰写的<a 
href="http://www.codeguru.com/cpp/i-n/internet/browsercontrol/article.php/c15275/"
target="_blank">Wt介绍</a>（可能有点过时）。
</p>

</div>
  </message>
  <message id="home.examples.wt">
<div>
<h4 class="example">Wt网站示例</h4>
<p>Wt首先为己所用了，本网站自身即是一个Wt应用实例。 </p>

<p>
  虽然不是一个交互性很强的应用，但Wt的网站不仅展示了Wt如何实现高度交互的Ajax应用，
  同时说明Wt适合于内容驱动的网站建设。Wt为纯HTML会话和Ajax提供良好的URL支持，
  这允许浏览器导航、书签等操作，还有利于搜索引擎优化。另外，Wt使用<a
  href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WViewWidget.html">WViewWidget</a>
  来最小化服务器端内存使用以提高应用的规模。
</p>

<p>
  导航功能由<a
  href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WMenu.html"
  target="_blank">WMenu</a>和<a
  href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTabWidget.html"
  target="_blank">WTabWidget</a>提供。这些widgets分享了共同的特性集。
  对于Ajax会话，他们均支持导航条目关联内容的<b>预先载入</b>和<b>滞后载入</b>，
  同时可以针对不同子条目分别<a
  href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WMenu.html#d7840197cc0caf0430792b9f4a0df60d"
  target="_blank">指定载入模式</a>。
  需要说明的是，预先载入不会增加载入时间，因为Wt渲染引擎总是首先传输可见的
  widget和某些变化，以此来优化应答时间。不可见部分(如其他预先载入的导航子项目的内容)
  则进行隐式传输，而且这种传输是在渲染可见部分完成之后进行。
</p>

<p>
  菜单导航栏部分采用C++无状态槽，其实现结果是<b>客户端</b>事件处理。
</p>
<p>
  WMenu的<b>内部路径</b>特点允许为每个菜单条目生成URL，
  这可以用于形成浏览器历史记录和书签操作。当用户通过历史记录浏览时，
  应用可以通过监听WApplication对象的
  <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WApplication.html#41c9bda19b28526e47e70b1b6045e7cf">
  内部路径变化信号（internalPathChanged）</a>，直接引起菜单条目指向内容的变化。同样地，
  当用户将一个URL加入书签中，并在日后重新访问时，widgets将读取该URL初始的内部路径，并创建
  相应的内容以显示。
</p>

<p>
  虽然说Wt占用很小的服务器CPU使用，但它确实也需要一部分内存来保持widget状态。当然，如果
  我们能够提供足够的内存（和交换空间），这将不成问题。另外，由于Wt网站部署在虚拟专用服务器
  （VPS）上，所以我们对此非常小心，并通过
  <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WViewWidget.html">WViewWidget</a>
  尽可能地减小服务器资源使用。
</p>
</div>
  </message>

  <message id="home.examples.treeview">
<div>
<h4 class="example">树视图</h4>

<p>
  <a href="http://www.webtoolkit.eu/wt/examples/treeview-dragdrop/treeview-dragdrop.wt" class="run" target="_blank">
    <img src="icons/green-play.png" style="vertical-align: top"/>运行该示例
  </a>
</p>

该示例展示了Wt的视图（WTreeView、WTableView和PieChart）和数据模型等相关功能。

<ul>
  <li>
    该示例使用了<a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTreeView.html"
    target="_blank">WTreeView</a>
    和<a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTableView.html"
    target="_blank">WTableView</a>在树或表中渲染模型数据；
  </li>
  <li>
    使用了<a
    href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WSortFilterProxyModel.html"
    target="_blank">WSortFilterProxyModel</a>
    来实现别一个模型数据的排序和过滤；
  </li>
  <li>
	该示例还展示如何实现选中条目的拖放效果；
  </li>
  <li>
    使用了可嵌套的布局管理器（水平方向和垂直方向的
    <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WBoxLayout.html" target="_blank">
      WBoxLayout</a>）来实现自动填充的布局；
  </li>
  <li>
    展示了如何使用模态
    <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WDialog.html"
    target="_blank"> WDialog</a>显示一个简单的表单，示例中表单使用了
    <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WGridLayout.html"
       target="_blank">WGridLayout</a>作为布局管理器；
  </li>
  <li>
    展示了如何使用基于上下文的
    <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WPopupMenu.html" target="_blank">
      WPopupMenu</a>。
  </li>
</ul>
</div>
  </message>
  <message id="home.examples.chart">
<div>
<h4 class="example">图表</h4>

<p>
  <a href="http://www.webtoolkit.eu/wt/examples/charts/charts.wt" class="run" target="_blank">
    <img src="icons/green-play.png" style="vertical-align: top"/>运行该示例
  </a>
</p>

<p>该示例展示了<a
href="http://www.webtoolkit.eu/wt/doc/reference/html/group__charts.html" target="_blank">Wt
的图表widgets</a>，这些widgets基于Wt的跨浏览器绘图API实现。
绘图API使用了内置于浏览器的高质量图形支持（注意：不是利用传统的在服务器端
渲染PNG/GIF图像的方法），主要依赖浏览器的内联VML、内联SVG、HTML 5画布或
PNG图像等将绘制内容渲染于<a
href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WPaintedWidget.html"
target="_blank">WPaintedWidget</a>。
</p>

<p>该示例同时展示了Wt的MVC框架，包括
<a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTableView.html"
target="_blank">表视图</a>和图表所基于的
<a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WAbstractItemModel.html"
target="_blank">数据模型</a>。Wt采用这种方式，能够将数据模型的每个变化自动
反应于视图的更新中。当然，数据模型可以是字符串、数值或者
<a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WDate.html"
target="_blank">日期型</a>。你可以通过编辑表视图的数据来直接观察以上动作机制。
</p>

<p>最后，我们还可以知道如何使用多项输入widgets、如何对输入的变化做出反应、
如何设置和读取选项的内容、以及如何使用
<a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WComboBox.html"
target="_blank">WComboBox</a>与MVC数据模型关联，在以上背景下，Wt库实现了数据
在浏览器端和服务器端的同步。</p>
</div>
  </message>
  <message id="home.examples.git">
<div>
<h4 class="example">Git查看器</h4>

<p>
  <a href="http://www.webtoolkit.eu/wt/examples/gitmodel/gitview.wt" class="run" target="_blank">
    <img src="icons/green-play.png" style="vertical-align: top"/>运行该示例
  </a>
</p>

<p>
  该示例展示了如何为Wt的MVC视图类（如
  <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WTreeView.html" target="_blank">
  WTreeView</a>）实现定制数据模型。
</p>
<p>
  Wt提供了
  <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WStandardItemModel"
  target="_blank">WStandardItemModel</a>，该类可以被填充以数据
  （如由数据库获得），其缺点是所有数据存储在内存中且须提前获取。但是，
  通过重新实现<a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WAbstractItemModel"
  target="_blank">WAbstractItemModel</a>，我们可以实现另一类数据模型，即
  仅在需要时获取数据，这就提供了一种数据载入与数据存储的平衡。
  该示例中，我们实现了树模型，该树可在<a href="http://git-scm.com/">
  git仓库</a>的修改中导航。该模型将文件夹节点标识符滞后存储在内存中，
  以生成每个文件夹的唯一ID。最初，我们认为可以使用SHA-1 ID，但具有相同
  内容、在git仓库不同位置的文件夹却具有相同的SHA-1 ID，而我们又想采用
  不同的<a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WModelIndex.html"
  target="_blank">模型索引</a>来表达，因此采用了上面的方法。
</p>
</div>
  </message>

  <message id="home.examples.composer">
<div>
<h4 class="example">邮件编辑器</h4>

<p>
  <a href="http://www.webtoolkit.eu/wt/examples/composer/composer.wt" class="run" target="_blank">
    <img src="icons/green-play.png" style="vertical-align: top"/>运行该示例
  </a>
</p>

<p>
  该示例实现了一个酷似GMail的邮件编辑器，除此还展示了如何轻松实现文件异步上传。
</p>

  <ul>
    <li>
	  其中<i>ContactSuggestions</i>类提供了“收件人”、“抄送”、“密送”地址的
	  自动补全功能，该类继承自
      <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WSuggestionPopup.html"
	  target="_blank">WSuggestionPopup</a>类，此类使用了诸多
      <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1JSlot.html"
	  target="_blank">JSlot</a>对象。对这些槽，客户端JavaScript事件处理代码
	  由开发者自定义的JavaScript决定（这不同于无状态槽中客户端JavaScript
	  代码由第一次调用时“学习”得到的方式）。Wt采用这种方式，弹出的可能适合
	  的联系人列表的排序完全由客户端决定。注意：建议框中的联系人是在背景中
	  自动传递的，原因很简单，因为他们是不可见的。
    </li>
    <li>
      其中的<i>AttachmentEdit</i>展示了
      <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WFileUpload.html"
	  target="_blank">WFileUpload</a>的使用，该类允许
      <b>文件的异步传输</b>，也就是说我们可以实现编辑邮件内容的同时上传附件。
    </li>
    <li>
	  其中的<i>Option</i>和<i>OptionList</i>类展示了无状态槽是如何在行为不完全
	  是无状态的情况下使用的。在这种情况下，一个Option的隐藏影响了临近可见Option：
	  即只有当存在某个临近选项时，一个选项才需要分隔线。当状态变化后，通过
	  <b>使无状态槽的实现失效</b>，我们仍能够使用无状态槽的实现，并体验到
	  客户端事件处理的高效！
    </li>
  </ul>
</div>
  </message>
  <message id="home.examples.chat">
<div>
<h4 class="example">简单聊天示例</h4>

<p>
  <a href="http://www.webtoolkit.eu/wt/examples/simplechat/simplechat.wt" class="run" target="_blank">
    <img src="icons/green-play.png" style="vertical-align: top"/>运行该示例
  </a>
</p>

<p>
  该示例实现了一个简单的、多用户的聊天应用，它展示了Wt中如何轻松地让多个用户
  即时互动，这里即用到<b>服务器端初始更新</b>将信息由一个用户推向其他用户。
</p>

<p>
  该示例还向你展示了基于类的web开发方法的良好效果，在这种方法中，你可以轻松实现
  对同一widget的多次实例化，示例中的SimpleChatClient widget就可以象使用Wt基本类
  (如按钮)一样，轻松实例化。
</p>

<p>
  象聊天这样的一些交互应用，可以允许用户传输HTML文本给其他用户，众所周知，这非常
  容易引起<b>跨站脚本攻击（XSS）</b>，因为用户可以不被限制地输入恶意代码(javascript)并作为
  其发出文本的一部分。当对应用户渲染收到的文本时，它可能将从该用户(如浏览器
  cookies)获得的一些隐私信息发送出去。Wt则完全阻止了这样的进攻，同时不会给开发者带来
  负担，因为象WText这样的widgets自然保证了所显示的只有安全文本(passive text)，自动
  舍弃任何严格意义上不是文本的东西。
</p>
</div>
  </message>
  <message id="home.examples.widgetgallery">
<div>
<h4 class="example">Widget展示库</h4>

<p>
  <a href="http://www.webtoolkit.eu/widgets" class="run" target="_blank">
    <img src="icons/green-play.png" style="vertical-align: top"/>前往widget展示库 
  </a>
</p>

<p> 
 该示例展示了Wt中大部分widget，另外还展示了相应的事件处理、布局类等。
 这可以作为Wt库中可执行的widget及其相关特性的参考，是有一定帮助作用的。
</p>

</div>
  </message>

  <message id="home.download">
    <h3><span>下载</span></h3>
  </message>
  <message id="home.download.license">
<h4>许可</h4>

<p>Wt可以在GNU通用公共许可(GPL)或商业许可下使用。</p>

<p>如果你希望在<b>GPL</b>下使用Wt库，那么你可以以任何目的创建web应用，
 并部署在你自己的intranet或Internet服务器上，而没有必须开放源代码的要求。
</p>

<p>注意，根据GPL条款规定，如果你正以二进制形式将你的web应用转给其他方使用，
 其方式或为销售，或免费提供，此时你必须在发布版上附带程序源代码；同时，这
 一要求亦适用于针对Wt库原始形式或修改形式的再发布。
</p>

<p>所谓<b>商业许可</b>则没有以上限制，具体请访问我们的
 <a href="http://www.emweb.be/?page=license-wt">许可信息</a>
 页面，以获得对许可条款、售价、订购的具体要求。
</p>

<p>注：网站所有中译文，特别是与法律许可等相关的内容最终以英文为准。
</p>

<p>同时，你还可以直接从Wt库作者处获得
 <a href="http://www.emweb.be/services">支持与培训</a>。
</p>
  </message>
  <message id="home.download.packages">
    <h4><span>可用版本</span></h4>
  </message>
  <message id="home.download.version"><b>版本</b></message>
  <message id="home.download.date"><b>日期</b></message>
  <message id="home.download.description"><b>描述</b></message>

  <message id="home.download.other">

<h4>Wt库安装器：winst <span class="emph">(new!)</span></h4>

如果你现在对Wt特别好奇，想尝试一下，但是你的系统或发行版还没有提供
最新的升级包，那么这个安装器可能非常适合你。这个安装器将下载并将Wt
安装在<b>类UNIX环境</b>下，同时提供了用于运行示例的脚本。

<p>
Wt安装器需要<tt>CMake</tt>和<tt>GNU make</tt>，同时可能会通过<tt>wget</tt>
下载软件。
</p>
<p>
下载该软件包
（<a href="http://www.webtoolkit.eu/packages/winst-0.3.tar.gz">winst-0.3.tar.gz</a>）
或者直接获得最新的 git 版本：
<div class="fragment">
  <pre class="fragment">$ git clone http://www.webtoolkit.eu/git/winst.git</pre>
</div>
</p>

<h4>系统需求</h4>

为了能够编译和安装最新版的Wt库，你至少需要安装以下两个包：
<ul>
  <li><a href="http://www.cmake.org/">CMake</a> 交叉平台make配置工具<br />

    建议 CMake &gt;= 2.6（尽管2.4也能工作）。
  </li>
  <li>
    必不可少的<a href="http://www.boost.org/">
    boost C++ 库</a>： boost-1.36 或更高版本。 <br />

	下面的boost库需要安装（不只是头文件）：
      <tt>boost_date_time</tt>、<tt>boost_regex</tt>、
      <tt>boost_program_options</tt>、<tt>boost_signals</tt>、
      <tt>boost_system</tt>和可选的（但强力推荐）
      <tt>boost_thread</tt>。
  </li>
</ul>

下面的包是可选的，但如果能有可以体验到更多的Wt特性：
<ul>
  <li><a href="http://www.postgresql.org/">PostgreSQL</a>：如果安装上，那么
    <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1Dbo_1_1backend_1_1Postgres.html">postgres
    连接器</a>将会为实现ORM库（<a href="http://www.webtoolkit.eu/wt/doc/tutorial/dbo/tutorial.html">Wt::Dbo</a>）
	而被编译；</li>
  <li><a href="http://libharu.org/wiki/Main_Page">libharu</a>：如果安装上，那么
	<a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WPdfImage.html">WPdfImage</a>绘图设备
	将被编译，这样就能够将图片整合进PDF文件或作为PDF文件处理；</li>
  <li><a href="http://www.graphicsmagick.org/">GraphicsMagick</a>：如果安装上，那么
    <a href="http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WRasterImage.html">WRasterImage</a>
	绘图设备将被编译，这样就能够在光栅扫描图像（PNG或GIF）上绘图了；</li>
</ul>

<p>其他必需部分依赖于你所选择的连接器支持，连接器是能够实现你的Wt应用与浏览器通讯的工具：</p>

<h5>对于FastCGI（限于Unix）：</h5>

<ul>
  <li>Apache 1 或 2，或其他支持FastCGI协议的web服务器</li>
  <li>
    <a href="http://www.fastcgi.com/#TheDevKit">FastCGI开发工具包</a>
    ：fcgi-2.4.0
  </li>

   <li>
	 使用apache时：
     Apache <a href="http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz">mod_fastcgi</a>：
     mod_fastcgi-2.4.x.<br />或者也可以使用
     <a href="http://httpd.apache.org/download.cgi#mod_fcgid">mod_fcgid</a>：
     mod_fcgid-2.3.5。
  </li> 
</ul>

<h5>对于内置 httpd（wthttpd）：</h5>

<ul>
  <li>内置httpd需要boost asio C++ 库（仅包含头文件的库）；</li>
  <li>可选的：libz（用于HTTP压缩）和openssl（用于HTTPS支持）；</li>
</ul>

<h5>对于ISAPI（限于Win32）：</h5>

<ul>
  <li>ISAPI连接器只有配合MS IIS服务器才能部署Wt应用。</li>
</ul>

你可以依照<a
href="http://www.webtoolkit.eu/wt/doc/reference/html/InstallationUnix.html">安装指南
</a>编译Wt并运行相关示例，或者如果你的运行平台包含在列表
<a href="http://redmine.webtoolkit.eu/projects/wt/wiki/Wt_Installation">平台相关安装指南</a>
中的话，也可参照执行。

<h4>Git仓库</h4>

<p>如果你希望跟踪最新的变化，或者参与到Wt的开发中，你可能希望使用git仓库。</p>

<p>
检出操作：
<div class="fragment">
  <pre class="fragment">$ git clone http://www.webtoolkit.eu/git/wt.git</pre>
</div>
</p>
  </message>

  <message id="home.community">
<h3><span>社区</span></h3>

<h4>作者</h4>

<p>
Wt最初由<a
href="mailto:koen@emweb.be">Koen Deforche</a>开发，目前由
<a href="http://www.emweb.be/">Emweb bvba</a>公司维护。</p>

<p>我们非常感谢以下开源项目（代码借鉴）：</p>
<ul>
<li>Wt内置的httpd基于<a
href="http://asio.sourceforge.net/">asio C++库
</a>的一个示例开发，该库由Christopher M. Kohlhoff开发（遵循<a
href="http://www.boost.org/LICENSE_1_0.txt">Boost Software License</a>）；</li>
<li>Wt的<a href="http://threadpool.sourceforge.net/">Thread pool</a>
实现来自于Philipp Henkel（遵循<a
href="http://www.boost.org/LICENSE_1_0.txt">Boost Software License</a>）；</li>
<li>Wt的<a href='http://rapidxml.sourceforge.net/'>RapidXML</a>
库由Marcin Kalicinski开发（遵循<a
href="http://www.boost.org/LICENSE_1_0.txt">Boost Software License</a>）。</li>
</ul>

<h4>Wiki</h4>

<p>
<a href="http://redmine.webtoolkit.eu/projects/wt/wiki">Wt Wiki</a>
由社区维护，包括很多有用信息，如针对不同Linux发行版的安装说明等。
</p>

<h4>支持</h4>

<p>你可以直接从Wt库作者处获得
<a href="http://www.emweb.be/services">支持与培训</a>
</p>

<p>另外，你还可以从我们的<a
href="http://redmine.webtoolkit.eu/projects/wt/boards">社区论坛
</a>获取帮助， 当然还有<a
href="mailto:witty-interest@lists.sourceforge.net">邮件列表</a>
（<a
href="http://lists.sourceforge.net/lists/listinfo/witty-interest">
如何加入</a>），你可以通过<a
href="http://gmane.org/info.php?group=gmane.comp.web.witty.general">Gmane
gateway</a>搜索或浏览邮件列表存档内容（向建立者 Pau Garcia i Quiles 致敬）
</p>

<h4>贡献</h4>

<p>Wt的开发得到以下公司或组织的资助：</p>

<p>
<table>
  <tr>
    <td class="sponsor-logo"><a href="http://www.emweb.be/">
      Emweb bvba</a>
    </td>
    <td class="sponsor-role">
      Wt创建者、官方维护者以及相关支持的提供者
    </td>
  </tr>
  <tr>
    <td class="sponsor-logo">
      <a href="http://www.eurofer.be/">
      Eurofer</a>
    </td>
    <td class="sponsor-role">
      Wt图表库、WTreeView、及分层数据模型等开发的资助者
    </td>
  </tr>
</table>
</p>

<p>我们欢迎用户为Wt献计献策，这可能包括某些widgets的小补丁、
widget集以及Wt核心性能提高等。</p>

<p>然而，由于Wt采用开源与商业双重许可，并将Wt作为一个整体在法律上予以保护，
即将Wt作为一个实体，而对于每个部分的版权不予考虑，因此我们在接受用户贡献之前
要求贡献者将版权指认给<a href="http://www.emweb.be/">Emweb</a>。
</p>
<p>注：网站所有中译文，特别是与法律许可等相关的内容最终以英文为准。
</p>

<h4>翻译</h4>

Wt网站的中文翻译工作由中央民族大学宋志民协助完成。

<h4>Sourceforge</h4>

<a href="http://sourceforge.net"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=153710&amp;type=1" style="vertical-align:middle" width="88" height="31" border="0" alt="SourceForge.net Logo" /></a>
Wt在Sourceforge的主页请点击<a href="http://sourceforge.net/projects/witty/">此处</a>。
  </message>
  <message id="home.other-language">

<h3><span>!C++ ?</span></h3>

<p>你是否喜欢Wt库的功能，但又不太倾向于C++编程？</p>

<p>不要失望，Wt还有其他语言的原生变体或可与其他语言绑定使用：

<ul class="languages">
<li>
<div>
<img class="java-language-icon" src="icons/java-logo.png" alt="Java"></img>

你可以使用我们的<a href="/jwt">JWt</a>，JWt是Wt原生的<b>Java</b>版。JWt
与Wt同时开发与维护，虽然他们之间有些许差异，但功能和特点几乎相同。JWt可以
运行在JVM中，并可以部署于任何Servlet内。
</div>

<br style="clear: both" />

</li>
<li>
<div>
<img class="language-icon" src="icons/ruby-logo-R.png" alt="Ruby"></img>

Richard Dale 正在开发和维护
<a href="http://github.com/rdale/wtruby/tree/master">WtRuby</a>，也就是将
<b>Ruby</b>绑定到Wt，WtRuby实施原理与将Ruby绑定到Qt和KDE相同。
</div>


<br style="clear: both" />

</li>

<li>
<div>
<img class="language-icon" src="icons/clojure-logo.png" alt="Clojure"></img>

为了达到JVM对其他语言的支持，Raphael Bauduin正在实验<a
href="http://www.nsa.be/index.php/eng/Blog/Using-Jwt-yes-it-s-a-J-with-Clojure">
从<b>Clojure</b>（LISP变体）中使用JWt</a>，链接中记录了他的实验过程，该项目最终
将开发出一个小型支持库。
</div>

<br style="clear: both" />

</li>
</ul>
</p>

  </message>
  <message id="home.documentation">
 
<h3><span>文档</span></h3>

<h4>编译和安装</h4>

<p>
通用安装指南(UNIX)请点击
<a href="http://www.webtoolkit.eu/wt/doc/reference/html/InstallationUnix.html">此处</a>，此文档也可
在源文件包中找到，分别为INSTALL或INSTALL.html文件。</p>
<p>
另外，<a href="http://redmine.webtoolkit.eu/projects/wt/wiki">Wt Wiki</a> 还有一部分涉及到
<a href="http://redmine.webtoolkit.eu/projects/wt/wiki/Wt_Installation">平台相关安装说明</a>。
</p>

<h4>介绍和入门</h4>

<ul>
<li>请参考我们的<a
href="http://www.webtoolkit.eu/doc/Wt-WhitePaper.pdf">白皮书</a>以了解使用Wt较之于其他传统web开发框架的好处。
</li>

<li>Dr Dobbs Journal上有一篇很好的<a href="http://www.ddj.com/cpp/206401952">
介绍性文章</a> (2008年2月)。</li>

<li>Wt参考手册中包含一篇
<a href="http://www.webtoolkit.eu/wt/doc/reference/html/overview.html">Wt库概览
</a>，这是一篇很好的入门文章。</li>

<li>Software Developers Journal上有一篇入门性文章（
   <a href="http://www.webtoolkit.eu/wt/doc/tutorial/wt-sdj.xhtml">在线阅读</a>，
   <a href="http://www.webtoolkit.eu/wt/doc/tutorial/wt-sdj.pdf">PDF版</a>）
   （写于2006年4月，稍微有点过时），
   这篇入门文章使用了Hangman猜词游戏示例的代码（也可参看源文件）进行介绍。
</li>

<li>Victor Venkman所写的
<a href="http://www.codeguru.com/cpp/i-n/internet/browsercontrol/article.php/c15275/">Wt介绍</a>中，对
<a href="#/wt/examples/">hello world 示例</a>进行了评测。
</li>

</ul>

<h4>参考手册</h4>

<p><a href="http://www.webtoolkit.eu/wt/doc/reference/html/index.html"
target="_blank"> Wt参考手册</a>（在新窗口中开启）直接由doxygen从源码中生成，
手册中也包含了关于树表示例的入门教程，特别是针对无状态槽的实现机制进行了
说明，另外还强调了Wt允许客户端代码在事件处理中可进一步优化的一些高级特性。
</p>

<h4>注释性示例</h4>

<p>示例的源码级文档也已经制作完成，<a href="http://www.webtoolkit.eu/wt/doc/examples/html/modules.html"
target="_blank">在此查看</a>（新窗口中打开）。</p>

<h4>Wiki</h4>

<p>由社区维护的<a href="http://redmine.webtoolkit.eu/projects/wt/wiki">Wt Wiki</a>也可以查看，里面有
   很多有用信息，比如FAQ和一些技巧等。
</p>

  </message>

  <message id="srcview.title.CPP.">
    <div class="srcviewtitle">
      <h2>Wt示例源代码</h2>

      <p>
	  浏览<a href="http://www.webtoolkit.eu/wt">Wt</a>中所有示例的源代码。
      </p>
    </div>
  </message>

  <message id="srcview.title.">Wt示例</message>

  <message id="srcview.title.CPP.hello">
    <div class="srcviewtitle">
      <h2><i>Hello world</i>示例源代码</h2>

      <p>
	浏览以下 
	<a href="#/cn/examples/hello_world">
	  Hello world</a>示例源代码。
      </p>
    </div>
  </message>

  <message id="srcview.title.hello">示例：Hello world</message>

  <message id="srcview.title.CPP.charts">
    <div class="srcviewtitle">
      <h2><i>图表</i>示例源代码</h2>

      <p>
	浏览以下
	<a href="#/cn/examples/charts">
	  图表</a>示例源代码。
      </p>
    </div>
  </message>

  <message id="srcview.title.charts">示例：图表</message>

  <message id="srcview.title.CPP.treeview-dragdrop">
    <div class="srcviewtitle">
      <h2><i>树视图</i>示例源代码</h2>

      <p>
	浏览以下
	<a href="#/cn/examples/treeview">
	  树视图</a>示例源代码。
      </p>
    </div>
  </message>

  <message id="srcview.title.treeview-dragdrop">示例：树视图</message>

  <message id="srcview.title.CPP.composer">
    <div class="srcviewtitle">
      <h2><i>邮件编辑器</i>示例源代码</h2>

      <p>
	浏览以下
	<a href="#/cn/examples/composer">
	  邮件编辑器</a>示例源代码。
      </p>
    </div>
  </message>

  <message id="srcview.title.composer">示例：邮件编辑器</message>
  
  <message id="srcview.title.CPP.wt-homepage">
    <div class="srcviewtitle">
      <h2><i>Wt网站</i>示例源代码</h2>

      <p>
	浏览以下
	<a href="#/cn/examples/wt-homepage">
	  Wt网站</a>示例源代码。
      </p>
    </div>
  </message>

  <message id="srcview.title.wt-homepage">示例：Wt网站</message>

  <message id="srcview.title.CPP.gitmodel">
    <div class="srcviewtitle">
      <h2><i>Git查看器</i>示例源代码</h2>

      <p>
	浏览以下
	<a href="#/cn/examples/gitmodel">
	  Git查看器</a>示例源代码。
      </p>
    </div>
  </message>

  <message id="srcview.title.gitmodel">示例：Git查看器</message>

  <message id="srcview.title.CPP.simplechat">
    <div class="srcviewtitle">
      <h2><i>简单聊天</i>示例源代码</h2>

      <p>
	浏览以下
	<a href="#/cn/examples/simplechat">
	  简单聊天</a>示例源代码。
      </p>
    </div>
  </message>

  <message id="srcview.title.simplechat">示例：简单聊天</message>

  <message id="srcview.title.CPP.widgetgallery">
    <div class="srcviewtitle">
      <h2><i>Widget展示库</i>示例源代码</h2>

      <p>
	浏览以下
	<a href="#/cn/examples/widgetgallery">
	  Widget展示库</a>示例源代码。
      </p>
    </div>
  </message>

  <message id="srcview.title.widgetgallery">示例：Widget展示库</message>
</messages>
