WTL简介

合集下载

运营商移动Widget业务研究

运营商移动Widget业务研究

【摘 要】文章对移动widget标准化现状进行了介绍,对移动Widget业务发展现状和趋势进行了分析,并着重对运营商如何结合自身独特优势开展移动Widget业务进行了研究,提出了运营商开展移动Widget业务应用的几种模式、架构及关键技术。

【关键词】移动Widget 3G 应用商店 移动广告 行业应用1 引言2009年中国的3G网络建设如火如荼,面对3G带来的移动通信带宽的大规模提速,现有的移动通信应用均是基于2G窄带条件下设计的,已经不能满足用户的需求,也不能充分发挥3G网络资源的优势。

因此,为3G网络配套丰富多样的3G应用既是运营商3G战略成败的关键,也是运营商克服传统语音电话业务收入不断下滑问题的重大机遇。

2009年,移动Widget技术在传统的移动应用技术(如:JAVA、BREW、C、短信、彩信、WAP等)中脱颖而出,受到了越来越多的关注。

本文将对IT厂商和手机厂商引领的移动Widget技术及业务现状进行分析,讨论运营商如何摆脱简单模仿IT厂商和手机厂商的做法,以发挥运营商的优势,开辟移动Widget业务应用的一片蓝海。

2 移动Widget发展现状2.1 标准化现状鉴于移动Widget的具大潜力,各种国际组织纷纷开展了对其标准化的研究,并取得了一系列成果,促进了移动Widget应用的发展。

主要的标准化组织有W3C、OMTP BONDI、JIL。

◆W3C专门致力于创建Web相关的技术标准,并促进Web更深、更广地发展。

从2006年开始关注Widget,已经制定的Widget 1.0版本规范,对打包、配置、数字签名、更新等进行了要求。

◆Open Mobile Terminal Platform(OMTP)是由国外8家具有影响力的移动运营商组成的联盟,致力于简化移动数据服务提供并增强移动终端的安全性。

目前OMTP 已经扩展到了涵盖手机制造商在内的整个产业链中的35家公司。

针对Widget和Web技术成立了开源BONDI项目,并正式发布了BONDI 1.0规范,对移动设备底层能力调用的安全架构和接口进行了标准化。

spc数据采集与管理系统

spc数据采集与管理系统

惠州市维拓自动设备有限公司 SPC 系统简介1SPC 软件介绍1、什么是 SPC 2、SPC 的作用 3、SPC 的主要内容 4、SPC 系统对企业的帮助 5、SPC 系统需要的软硬件配置可采集内容 6、SPC 系统运作流程 7、SPC 系统功能介绍 8、SPC 系统的实施21、什么是 SPCSPC 即统计过程控制(Statistical Process Control)。

SPC 主要是指应用统计分析技术对 生产过程进行实时监控,科学的区分出生产过 程中产品质量的随机波动与异常波动,从而对 生产过程的异常趋势提出预警,以便生产管理 人员及时采取措施,消除异常,恢复过程的稳 定,从而达到提高和控制质量的目的。

32、SPC 的作用找出什么时候会发生异常(WHEN) 找出发生什么具体异常(WHAT) 分析出异常的具体原因(WHY) 得出解决异常的方法(HOW) 建立起预防方案(HOW)42、SPC 的作用 – 具体表现分析共同原因 分析共同原因与 共同原因与特殊原因 改善的 的评估 改善 减少报表处理 减少报表处理的工作量 报表处理的工作量 找出最大品质问题 找出最大品质问题原因 品质问题原因, 原因,以便工作更有绩效 减少数据在人员传递的过程中的变异 减少数据在人员传递的过程中的变异 分辨数据的真实性 分辨数据的真实性 从宏观到微观全面真实 从宏观到微观全面真实地了解品质状况 全面真实地了解品质状况 建立一个与品质有关部门的沟通 建立一个与品质有关部门的沟通平台与管道 的沟通平台与管道53、SPC 的作用主要内容主要分为: 主要分为:计数值与 计数值与计量值两种 计量值两种 过程涉及: 过程涉及:1.数据采集 1.数据采集 2.数据分析 3.报警 3.报警 4.现场处理 4.现场处理 5.图形分析 5.图形分析 6.持续改善 6.持续改善 64、SPC 系统对企业的帮助帮助企业在质量控制 帮助企业在质量控制上作到 企业在质量控制上作到" 上作到"事前" 事前"预防和控制 降低企业成本 降低不良率 降低不良率, 不良率,减少返工和浪费 提高劳动生产率 提供核心竞争力 赢得广泛客户 更好地理解和实施质量体系75、SPC 系统所需的软硬件配置软件配置数据库服务器: 数据库服务器:Windows 2000 Server 版或以上 数据库平台: 数据库平台:Microsoft SQL Server 2000 版或以上 邮件服务器: 邮件服务器:可以发送和接收邮件用于邮件报警 工作站: 工作站: Windows XP 版或以上, 以上,Offiecs 软件 语言环境: 语言环境:简体中文、 简体中文、繁体中文、 繁体中文、英文 接口: 接口:RS-232485接口, 接口,用于连接测量工具自动采集 数据 85、SPC 系统所需的软硬件配置硬件架构图RS-232接口 现场测量工具 管理者查看质量报表 及现场品质状况 数据库服务器 现场测量工具 工序数据采集 工程师进行数据 分析得出改善方法工序数据采集公司网络 RS-232接口95、SPC 系统所支持的采集项目/ 系统所支持的采集项目/终端可采集判断项目:1: 视觉激光外型尺寸,硬度,光洁度,体质重量数据采集 2:电气性能线路板电测 电流 电压 内阻 高压 通断 等电气性能安全数据采集 3: 家用电器实验数据采集监测 4:物理化学工程实验数据采集,分析 5: 车辆工程现场,故障诊断数据采集,失效判断 6:家居生活用品实验判断数据采集,判断 7:食品安全数据采集 8: 公司现场生产环境数据采集,控制(如:环境,温度,静电,化学浓度等) 9:现场产能计算,流程分析,失效判断 10: 支持一切可量化的非标定制采集嵌入式模块数据采集支持通信接口RS232 485 I/O支持查看处理方式:PC 手持终端 智能手机 WEP远程客户端106、SPC 系统运作流程117、SPC 系统功能介绍一、工作站的数据库连接配置本系统支持连接多个数据库服务器,如有网络支持您可以在同一地点通过 数据库切换看到每间工厂的状况。

TCL通讯资源优势及其网络家族图

TCL通讯资源优势及其网络家族图

资料范本本资料为word版本,可以直接编辑和打印,感谢您的下载TCL通讯资源优势及其网络家族图地点:__________________时间:__________________说明:本资料适用于约定双方经过谈判,协商而共同承认,共同遵守的责任与义务,仅供参考,文档可直接下载或修改,不需要的部分可直接删除,使用时请详细阅读内容目录一、公司简介 (2)1、总体概况 (3)2、企业经营理念 (3)3、公司历程 (3)二、TCL 通讯资源优势 (4)三、研发实力 (5)四、质量保障体系 (6)五、服务理念 (9)六、TCL通讯网络家族图 (10)七、ADSL产品知识 (12)1、产生背景 (12)2、ADSL简单原理 (12)3、ADSL特点 (13)4、ADSL业务功能 (15)5、接入方式 (16)6、解决方案 (17)7、解疑答惑 (19)八、TCL通讯ADSL销售情况 (23)九、TCL通讯网络家族:ADSL网络产品重点推介 (25)十、附:ADSL信息产业部入网证书 (30)公司简介TCL通讯设备股份有限公司是TCL集团旗下支柱产业之一,创立于1985年,1993年成为通讯行业第一家上市公司;1995年获得“中华之最——电话大王”称号,2002年荣获“中国名牌产品”称号。

TCL电话机远销世界7大洲50多个国家。

TCL电话机产销量已连续13年在国内名列前茅,全球拥有逾一个亿的用户。

作为国内通讯行业的领导者,TCL通讯以雄厚的实力和尖端技术一直走在通讯行业的前面。

TCL通讯设备股份有限公司立足于保持通讯终端强势品牌,将电话机产品做精、做强的基础上,致力于向宽带社区、教育、政府、企事业等领域用户提供服务、创造价值。

拓展具有高附加值、较高科技含量以太网交换设备、互联网接入终端产品、无线通产品的研发、生产和销售。

以真正迎合与满足各电信运营商及消费者的深层次需求,使TCL通讯设备股份有限公司发展成为与3C(通讯、消费、计算机)技术紧密结合的信息终端产品的高科技通讯企业。

WTO简介

WTO简介

• 2003年8月30日,世贸组织总理事会一致通过 了关于实施专利药品强制许可制度的最后文件 • 根据这份文件的规定,发展中成员和最不发达 成员因艾滋病、疟疾、肺结核及其它流行疾病 而发生公共健康危机时,可在未经专利权人许 可的情况下,在其内部通过实施专利强制许可 制度,生产、使用和销售有关治疗导致公共健 康危机疾病的专利药品。这不仅将大大降低相 关专利药品的市场价格,而且将有利于更迅速 和有效地控制、缓解公共健康危机,确保生命 健康基本权利得到尊重和保护。
认识WTO
1
159个
世贸组织与国际货币基金组织(IMF)、 世界银行(WB)一起被称为世界经济 发展的三大支际经济组 织之一,目前拥有159个成员国,成员国贸 易总额达到全球的97%,有“经济联合国” 之称。 • 基本职能 • 作为多边贸易谈判的讲坛; • 寻求解决贸易争端; 监督各成员贸易政策, 并与其它同制订全球经济政策有关的国际 机构进行合作。

WTL过程分析

WTL过程分析

WTL流程分析WTL 2007-01-15 14:19:02 阅读61 评论0 字号:大中小订阅一个窗口从创建到销毁,有这么几个主要过程。

在winmain中∙注册窗口类∙创建窗口∙进入消息循环在wndproc中∙处理消息现在我们就是要挖掘出wtl中在何处处理这些东西,怎么处理的。

首先:winmain在哪里?winmain在和工程名相同的cpp文件中。

名字叫做_twinmainint WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR lpstrCmdLine, int nCmdShow){HRESULT hRes = ::CoInitialize(NULL);// If you are running on NT 4.0 or higher you can use the following call instead to// make the EXE free threaded. This means that calls come in on a random RPC thread.// HRESULT hRes = ::CoInitializeEx(NULL, COINIT_MULTITHREADED);ATLASSERT(SUCCEEDED(hRes));// this resolves ATL window thunking problem when Microsoft Layer for Unicode (MSLU) is used ::DefWindowProc(NULL, 0, 0, 0L);AtlInitCommonControls(ICC_COOL_CLASSES | ICC_BAR_CLASSES); // add flags to support other controlshRes = _Module.Init(NULL, hInstance);ATLASSERT(SUCCEEDED(hRes));int nRet = Run(lpstrCmdLine, nCmdShow);_Module.Term();::CoUninitialize();return nRet;}从这个函数中,看不出什么,基本上实质上的内容都被分配在别的函数中处理了。

widget研究及应用

widget研究及应用

1. 引言互联网进入Web2.0时代,本质是用户产生信息。

既然每个人都是信息的制造者,信息量必然越来越多,这时必须通过一个机制来定制自己所需获得的信息,Widget是互联网应用的产物,更加开放,更便于信息获取。

Widget在互联网中的作用主要体现在以下两点:首先,实现了桌面应用和网络服务的结合,用户可以不用从浏览器登录网站就可以获得网络信息;其次,它提供了一个平台,用户可以自由地创建、发布、共享各类业务应用。

Widget主要有身材微、形式多、功能巨、姿容丽、个性化、易制作等特征,由于这些特征,Widget 得到广泛地应用,Widget应用和Widget思想正在入侵传统的互联网,未来将是Widget化时代-个性化信息定制时代。

随着Widget应用的不断演进,国际上很多Widget产品已经开始在手机媒体上应用。

Nokia推出了S 60平台的Widget,苹果的iPhone也搭载了Widget,然而由于规范的不统一,各个厂家的Widget应用还不能做到互通。

随着标准的制定,未来Widget会向着跨平台、跨系统、跨终端方向发展,这才能充分体现Web2.0所倡导的用户参与的实质。

目前Widget主要有5个分类:操作系统Widget、网页Widget、个人化首页Widget、客户端Widget 以及手机Widget。

互联网的之所以能够互联,是因为有各种各样的标准和约定,比如TCP/IP协议。

有了这些共识,互联网能够方便地联系起来。

Widget发展和Widget的各种应用,专注于个性化首页的Netvib es推出标准化Widget的概念(UWA),随着Widget标准化的推广,Widget的发展空间必将更加开阔。

Widget可能会被应用到软件里,也有人预言,Widget将会成为未来互联网广告的新载体。

2. 主要技术简介本文使用的是Yahoo!Widget,Yahoo!Widget是由雅虎推出的免费并开放源码的桌面应用程序平台。

WAP及WAP网关的基本介绍(20110327)


WAP简介:WAP模型与Internet的模型对比
主要内容
WAP简介 协议栈介绍 WAP PUSH PUSH介绍 业务流程介绍 Radius介绍
协议栈介绍:WAP1.X
什么是WAP1.X?
WAP1.0-> WAP1.1-> WAP1.2-> WAP1.2.1通称为 通称为WAP1.X 通称为 WAP1.X基于WEB标准,但做了许多修改,以克服早期无线设备和网络的问题: 终端:屏幕小,内存小,CUP能力差 网络: 带宽有限,响应时延较长 为无线设备制定的特殊协议 (WAP)和特殊标基语言 (WML, WMLScript) WAP gateway 位于无线设备和Internet之间 完成 WAP协议和HTTP协议的转换 转换WML/WMLScript 为压缩的二进制格式(WBXML: Wireless Binary XML)
协议栈介绍:WAP1.X-WTLS
WTLS:Wireless Transport Layer Security 基于TLS(旧称SSL)的安全协议 针对无线信道进行了改进 简化了握手过程 对加密算法进行了优化 提供以下功能 数据的完整性:数据不被破坏和修改 传输的保密性:加密 鉴权功能:对用户的身份进行验证 “拒绝服务”保护:检测并拒绝未验证通过的数据和重复的数据 WTLS存在的缺陷: WWW中TLS提供端到端的安全性 WTLS只提供WAP网关和WAP终端之间的安全通信,WAP网关负责实现WTLS和TLS安全协 议之间的转换。这是WAP的一个安全漏洞:信息在WAP网关处曾经以明文的方式出现了一 段时间,有可能被窃取
协议栈介绍: 协议栈介绍:WAP2.0
WAP2.0时网关的作用: 时网关的作用: 时网关的作用 (1)协议转换 ——基本省略 ) 基本省略 解码——弱化 :XHTML (2)内容编 解码 )内容编/解码 弱化

恶性胸膜间皮瘤的治疗进展


手术患者的选择
目前MPM无统一临床
VATS试验将对滑石粉胸膜固定和VATS下P/D术
后患者生活质量和生存率对比评估,其结果有助于 完善晚期患者的外科治疗策略。 4.1.5外科治疗尚存在的争议外科在肿瘤治疗 中具有重要的地位,然而在MPM治疗中的作用尚 存在争议,因胸膜在解剖上面积广泛,而MPM通常 侵袭性临近重要组织器官,理论上不能达到镜下完 整切除(R()),因此,Surgarbaker认为肉眼完全切除 (R1)术后辅助放化疗同样有利于延长生存。Flores 回顾性报道手术参与的综合治疗能明显延长患者生 存时间。因缺乏随机实验证实,有学者对手术的合 理性产生质疑【36 J。正在英国开展的随机临床试验 (methsothelioma
3诊断
3.1影像学诊断 影像学检查是胸膜间皮瘤的主要诊断依据之 一。胸腔积液、胸膜增厚:和胸膜肿块为其三大表 现。增强CT作为首选检查可以提供患者整个胸膜 表面、膈肌和纵隔淋巴结的情况,其特异度约88% 一100%,敏感度约36%一56%,主要表现为环状或 结节状胸膜增厚、胸膜增厚>lcm、纵隔胸膜受累伴 不同程度的胸腔积液。但CT常不能区分良性弥漫 性胸膜增厚和恶性胸膜间皮瘤,对于分辨位于叶间 裂部位的病变也有一定困难【6J。MRI的影像表现 和敏感度与CT类似,一般不作为常规检查,主要用 于术前评估患者纵隔结构、膈肌、胸壁受累情况[7|。 PET在鉴别胸膜良恶性病变方面有优势,其敏感度 约88.5%,特异度约96.8%L 8|,放、化疗后标准摄 取值(suv)的改变可作为疗效评价的参考指标【9|。 3.2病理诊断 细胞或病理学检查包括穿刺活检与开胸或胸腔 镜下活检。CT引导下穿刺诊断符合率约60%一 85%【10J。但细胞学检查在恶性胸膜疾病鉴别诊断 时仍有较大局限,确诊常需进一步做免疫组化,故需 较多标本。胸腔镜活检由于微创且能直观反映胸膜 病变范围、获取足够标本,有利于诊断和分期,因此 是MPM诊断和鉴别诊断最佳方法。免疫组化是 MPM最常用的辅助诊断方法.目前尚无完全特异性 的抗体用于鉴别诊断。角蛋白、P53和上皮膜抗原 (EMA)常用于区分胸膜病变的良恶性。敏感度和 特异度相对较高的标志物包括间皮素(针对上皮 型)、钙网膜蛋白和角蛋白CK5/6。其他免疫组化 标志物包括血栓调节蛋白、WTl、CEA、E一钙粘蛋白 等[11|。 3.3血清标志物 虽然目前尚无理想的血清标志物存在,但联合

纸箱生产工艺简介



完成淀粉糊化&纸板粘合
创 新
五层纸板在热板部排列是(从热板表面计起)
面纸、B芯、中芯、C芯、里纸
P10
瓦楞纸板生产线—裁切部






公 司
轮转切断机 作用:切断前段批量不良品
过桥组合 作用:平板平稳过渡
修边刀




压线轮


创 新
修边压线机(横压线)
裁切机(横切)
P11
瓦楞纸板生产线—堆栈部


面纸走向:预热缸→压力辊

瓦纸走向:预热缸→瓦楞辊→压力辊

淀粉糊走向:糊槽→刮糊轮→糊轮→瓦楞纸楞峰


P9
瓦楞纸板生产线—贴合部
秉 信
单面C芯
单面B芯

上糊槽
瓦楞纸板 瓦楞纸板



预热缸
预热缸
面纸


贴合机
贴合机
上糊轮
下糊轮
预热缸
下糊槽

压力轮
棉织带

贴合机
至 上
热板部

经贴合机后,在棉织带&压力轮作用下,瓦楞纸板进入热板部,
合完成对纸箱成型的切割


平轧板的上下抬动将纸板推 送到平轧模具,把纸箱轧成
设计效果
P22
纸箱段生产设备—后加工设备
秉 钉箱机 信 纸 业 有 限 公 司
手动打钉机

糊合机



变 革 创 新
半自动打钉机
P23
纸箱段常用原料---油墨

WorkLight简介

该模式中引入了“环境(Environment)”概念。在相同的应用代码上, WL 平台基于不同的Environment可以生成不同设备上的应用。 操作如下:选择工程下一个应用,点击MobileFirst Environment——》选 择则环境即可。 本地模式(Native API) (对于大多数的应用来说,混合模式开发应用已经足够满足需求。) 当用户有特殊需求时,就需要考虑 Native API 的开发。WL 平台只需要 在混合模式下对生成程序进行一定的改动,就可以完成本地模式的开发。 注:Native API需要独特的专业技术和知识和相应环境的开发平台。 开发价格偏高,且开发周期较长,但是能够交付最优质的用户体验。
搭建Worklight工作环境
1、安装Eclipse操作平台 Worklight作为一个插件,只有在eclipse安装成功的前提下才可以完成WL开发环 境的搭建。 能够支持worklight的eclipse版本如下: – Eclipse Juno v4.2.2 (SR2) – Eclipse Kepler v4.3.1 (SR1) – Eclipse Classic v4.2.2 – Eclipse Classic v4.3.1 2、两种方案为Eclipse安装Worklight开发环境组件:worklight Studio(推荐二) 方案一:在Eclipse窗口执行Help/Install New Software,然后点击右上角的Add, 在Add Repository中输入以下内容:ຫໍສະໝຸດ IBM WorkLight简介
Worklight 是 一套用于移动应用开发和基础平台整合的企业级解决方案,采用 HTML、CSS和JavaScript语言,就像开发静态Web网站一样在本地开发。 利用WL的整合平台,开发的工程被扩展成桌面的(Windows,Mac,Linux), 互联网的(Facebook等),移动设备上的(iOS,Android,RIM和Windows Phone)应用程序。 在移动设备上,WL基于Cordova提供设备的接口,使得JavaScript可以访问这 些原生接口。 开发者还能把一些流行的Javascript构架如jQuery Mobile,Sencha和Dojo整合 到Worklight中。 worklight支持的开发环境:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.WTL简介WTL 是Windows Template Library的缩写。

最初,WTL是由微软的ATL(Active Template Library)小组成员开发的一个SDK例子。

主要是基于ATL的对Win32 API的封装。

从 2.0后,功能逐步完善,成为了一个完整的支持窗口的框架(windows framework)。

与MFC相比较,功能并没有MFC完善。

比如MFC支持doc/view架构,而WTL 并不支持。

同时,WTL也没有Microsoft的官方支持。

但是,WTL是基于模版(template)的,其应用程序最小只有24KB,同时不象MFC,依赖DLL(MFC需要MFC42.DLL)。

1.1WTL与Win32界面应用程序的对比Win32应用程序可以分成两大类:控制台程序(console application)和窗口界面程序(windows GUI application)。

控制台程序的入口函数是main(),窗口界面程序的入口函数是WinMain()。

入口函数就是程序的主线程的运行起点。

这里讨论的开发框架(Framework)是针对窗口界面程序的。

窗口界面程序通常分成以下几类:SDI, MDI, multi-SDI, 和Dialog应用程序。

●SDI(Single Document Interface)应用程序通常只有一个主窗口(通常是一个框架窗口,Frame Window)。

框架窗口包含菜单、工具栏、状态栏和称为视(View)的客户工作区。

●multi-SDI(Multiple Threads SDI)应用程序有框架个主窗口。

比如IE浏览器,使用"文件/新建/窗口"命令后,会出现另一个IE窗口。

●MDI(Multiple Document Interface)应用程序有一个主框架窗口,但有多个子框架窗口。

每个子窗口都有自己的视(View)。

●Dialog应用程序是基于对话框的。

通常一个简单的SDI应用程序由两个函数组成。

一个是应用程序入口函数WinMain(),另一个是该应用程序窗口的窗口函数(比如WndProc)。

程序(主线程)从入口函数开始运行。

在该函数中,首先是注册并创建一个主窗口。

然后,启动消息循环。

消息循环中,根据不同的消息,将消息发送到窗口函数中处理。

当消息是退出消息时,该入口函数会退出消息循环,然后结束程序。

下面是一个最简单的Windows界面应用程序。

//应用程序入口函数int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){MSG msg;//1. 注册窗口类WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style = CS_HREDRA W | CS_VREDRAW;wcex.lpfnWndProc = (WNDPROC)WndProc;//指定窗口函数wcex.cbClsExtra = 0;wcex.cbWndExtra = 0;wcex.hInstance = hInstance;wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_HELLOWORLD);wcex.hCursor = LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName = (LPCSTR)IDC_HELLOWORLD;wcex.lpszClassName = szWindowClass;wcex.hIconSm = LoadIcon(wcex.hInstance,(LPCTSTR)IDI_SMALL);RegisterClassEx(&wcex);//2. 创建一个该类型的窗口HWND hWnd;hWnd = CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0,CW_USEDEFAULT, 0, NULL, NULL,hInstance, NULL);if (!hWnd) return FALSE;//3. 按nCmdShow所指定的方式显示窗口ShowWindow(hWnd, nCmdShow);UpdateWindow(hWnd);//4. 启动消息循环,将消息发送给相应的窗口函数while (GetMessage(&msg, NULL, 0, 0)){TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam;}//窗口函数LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam){PAINTSTRUCT ps;HDC hdc;char* szHello = "Hello, world!";switch (message){case WM_PAINT:hdc = BeginPaint(hWnd, &ps);RECT rt;GetClientRect(hWnd, &rt);DrawText(hdc, szHello, strlen(szHello),&rt,DT_CENTER);EndPaint(hWnd, &ps);break;case WM_DESTROY:PostQuitMessage(0); //退出应用程序break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0;}接下来看一下WTL的界面程序:首先还是让我们来看看WTL是怎样封装应用程序线程的。

和ATL类似,WTL使用一个_Module全局变量来保存全局数据,并通过它来引用应用程序级的代码。

在WTL中,该变量是CAppModule或CServerAppModule的实例。

后者通常作为COM服务器的应用程序。

每个应用程序都有一个或多个界面线程组成。

首先剖析一下WTL是怎样管理只有一个界面线程的(除了Mutli-SDI应用程序)。

单个界面线程的封装先看应用程序的入口函数。

CAppModule _Module;int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/,LPTSTR lpstrCmdLine, int nCmdShow){HRESULT hRes = ::CoInitialize(NULL);A TLASSERT(SUCCEEDED(hRes));::DefWindowProc(NULL, 0, 0, 0L);AtlInitCommonControls(ICC_COOL_CLASSES | ICC_BAR_CLASSES);//初始化模块hRes = _Module.Init(NULL, hInstance);A TLASSERT(SUCCEEDED(hRes));//程序逻辑,调用全局函数Run()int nRet = Run(lpstrCmdLine, nCmdShow);//终止模块_Module.Term();::CoUninitialize();return nRet;}在上面的代码中,_Module是一个全局变量,这里是CAppModule的一个实例。

而CAppModule类是对应用程序的封装。

它封装了诸如初始化模块等功能。

一个_Module还维持一个消息循环Map。

入口函数名为_tWinMain()。

当使用UNICODE时,编译器会将它替换为wWinMain(),否则,为WinMain()。

入口函数其实就是主线程(_Module)的起始点。

在该函数中,最关键的逻辑是调用了全局函数Run(),它是核心程序逻辑所在。

下面来看一下这个函数。

int Run(LPTSTR /*lpstrCmdLine*/ = NULL, int nCmdShow = SW_SHOWDEFAULT){CMessageLoop theLoop;_Module.AddMessageLoop(&theLoop);CMainFrame wndMain;if(wndMain.CreateEx() == NULL){A TLTRACE(_T("Main window creation failed!\n"));return 0;}wndMain.ShowWindow(nCmdShow);int nRet = theLoop.Run();_Module.RemoveMessageLoop();return nRet;}该函数创建了一个CMessageLoop实例,该实例包含了这个线程的消息循环。

这些消息循环都放在模块的全局消息循环中,通过线程的ID来索引。

这样,该线程的其它代码就能访问得到。

每一个应用程序维护一个消息循环队列Map,应用程序中的每个线程都通过"_Module.AddMessageLoop(&theLoop);",把该线程的消息循环加入到_Module 的消息循环Map中。

消息循环对象包含了消息过滤和空闲处理。

每个线程都可以加入空闲处理代码和消息过滤。

我们将在后面更加详细地探讨消息循环。

这里仅需要知道,线程是通过创建一个消息循环对象CMessageLoop来包装消息循环的。

//mywindow.hclass CMyWindow : public CWindowImpl<CMyWindow, CWindow, CFrameWinTraits>,public CPaintBkgnd<CMyWindow, RGB(0,0,255)>{public:DECLARE_WND_CLASS(_T("My Window Class"))typedef CPaintBkgnd<CMyWindow, RGB(0,0,255)> CPaintBkgndBase;BEGIN_MSG_MAP(CMyWindow)MESSAGE_HANDLER(WM_CREA TE, OnCreate)MESSAGE_HANDLER(WM_CLOSE, OnClose)MESSAGE_HANDLER(WM_DESTROY, OnDestroy)COMMAND_ID_HANDLER(IDC_ABOUT, OnAbout)CHAIN_MSG_MAP(CPaintBkgndBase)END_MSG_MAP()LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL&bHandled){HMENU hm = LoadMenu ( _Module.GetResourceInstance(),MAKEINTRESOURCE(IDR_MENU1) );SetMenu ( hm );return 0;}LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL&bHandled){DestroyWindow();return 0;}LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL&bHandled){PostQuitMessage(0);return 0;}LRESULT OnAbout(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL&bHandled){CAboutDlg dlg;dlg.DoModal();return 0;}};1.2WTL消息循环机制1.2.1消息过滤首先看一下CMessageLoop的核心逻辑CMessageLoop.Run()的代码:int CMessageLoop.Run(){BOOL bDoIdle = TRUE;int nIdleCount = 0;BOOL bRet;for(;;){while(!::PeekMessage(&amp;#38;m_msg, NULL, 0, 0, PM_NOREMOVE)&amp;#38;&amp;#38; bDoIdle){if(!OnIdle(nIdleCount++))bDoIdle = FALSE;}bRet = ::GetMessage(&amp;#38;m_msg, NULL, 0, 0);if(bRet == -1){A TLTRACE2(atlTraceUI, 0, _T(&quot;::GetMessage returned -1 (error)\n&quot;));continue; // error, don't process}else if(!bRet){A TLTRACE2(atlTraceUI, 0, _T(&quot;CMessageLoop::Run - exiting\n&quot;));break; // WM_QUIT, exit message loop}if(!PreTranslateMessage(&amp;#38;m_msg)){::TranslateMessage(&amp;#38;m_msg);::DispatchMessage(&amp;#38;m_msg);}if(IsIdleMessage(&amp;#38;m_msg)){bDoIdle = TRUE;nIdleCount = 0;}}return (int)m_msg.wParam;}在上面的代码中,有三个需要注意的地方。

相关文档
最新文档