版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Windows程式
(使用C++/C#)
PARTI
徐振家
July2004
Copyright2004C.H.
^程目的舆基碘需求
■目的
■了解Windowsrichclient的嘉作原理典方法
■有能力裂作事渠的程式
■基碘需求
■Windows的操作
■命令列模式-
■巾房户(account)服矜(services)>^限(privilege)
■C/C++程式^言十
■物件型别(class)典幺鹭承(inheritance)
■虚才疑函数、虚擦型月U(virtualfunction,virtualclass)
■模板(template)
■c#程式^言十
■道鹰列卷襁充的^程或教材
Copyright2004C.H.
程摘要
■Part1
■前言
■UI基磁fl念
■Part2
■C#WindowsForm程式^音十
■Part3
■MFC程式^言十
■ATL/WTL程式^音十
■Part4
■ProcessandthreadcontrolinWin32native
■Processandthreadcontrolin.Net
Copyright2004C.H.
、♦一、▲
刖百
Windows程式的基本架情
Copyright2004C.H.
Windows的沿革
Winl6
■1981PCinventedSystems
______)
■1985Windows1.0
■1987Windows2.0
Win32
■1990Windows3.0Systems
■1992Windows3.1J_______>
■1993WindowsNT
■1995Windows95
■1998Windows98
■2000WindowsME■2000Windows2000f■>
Win32/Win64
■2001WindowsXPManaged
■2003Windows2003<_,_______)
■2006''Longhorn"
Copyright2004C.H.
多檬而靡大的Windows
■Windows目前有二大崖品
■消费性重子
■桌上型PC或工作站
■伺服器市埸
■在不同的羟品^上程式,雎然基本原理相同,
使用的工具相似,但在程式嘉作上仍然是有差累
的
■windows是胭非常Mi大的系统,一般人不太可能
「擘畲」全部的Windowsprogramming
■所以若要迤II的言舌,每檬都畲很花畤^的
Copyright2004C.H.
Java带来的歌:fl革命
■Java是一槿物件醇向的程式^言
■Javaruntime是一*彳固虚才疑檄器(virtualmachine)加上
轨行畤期程式康(runtimelibrary)
■Java编亘睾器崖生的是intermediatecodeJavabytecode)?
而不是^平台的原生礁,所以Java可以跨平台
(因卷跨平台部份的^度已醇嫁至UJVM的^^者)
■Java较C慢,而且不能直接存取作渠系统的资源
■JavaVM作了^多高等的管理功能(如garbage
collection,threadmanagement…),程式嘉作上较卷便利
■Java是一木重ft醴基磁架情(framework)
■常然,所有的人都必须用Java来离程式才行,真鸭霸
Copyright2004C.H.
Microsoft.Net
■微软把Java的概念copy谩来,食」造的歉:tl架情
■.Net是以C#和C++嘉成的
■C#和Java非常相似,主要的不同是在designdecision
上,Java1.5探用了音午多C#的特色使雨者更卷相近
■.Net架横是language-independent6吾言辗勘
■CLR(CommonLanguageRuntime)
■编者睾器羟生MSIL(MicrosoftIntermediateLanguage)
■微揩.Net上的程式不再卷managedcode(因卷有garbage
collection的晶射系)
■所以.Net上的程式比nativecode慢
Copyright2004C.H.
Windows的架情
c
o
=
a
b
o
「
a
t
_
Windowso
"Avalon”ASP.NET“WinFS”ADO.NET“Indigo”n
FormsS
e
r
v
i
c
e
s
NetworkClasses
CLR
T
r
Graphics/Audio/WindowManagerSaSNetworkServices
eneMgmt
rsc
vauServices
icn
DirectXcttStorage
ey
so一networkprotocolstack
BaseServicesnIOMgr
KernelDeviceDrivers
HAL(HardwareAbstractionLayer)
Copyright2004C.H.
WindowsKernel的演暹
UserMode
SystemServiceSystemService
OSsubroutiniFileSystem
MemoryandI/Omanagement
ProcessorScheduler
HardwareHardware
徙WindowsNT4.0起,Windows
就是microkernel的架情
jht2004C.H.
Windows的H彝工具
■Windows上的^^工具非常的多,主流使用仍然是以微敢:
自家的VisualStudio卷主
■VisualStudio是一套整合璟境,可以^你il撵你所喜好的
程式言吾言(Basic,C++,C#,Java)^菱程式
■除了VisualStudio之外,微软也有樊行各槿不同的SDK
(SoftwareDevelopmentKit),道些SDK—^般均需搭配Visual
Studio来使用
■唯一■的例外是.NetFrameworkSDK
■微敢:所有的文件和程式都整合在MSDN(Microsoft
DocumentationNetwork)中,你可以依你的需要,向
Microsoft(http://msdn.microsoftcom)
■微软举寸VisualStudio的中文化太做底反而不好用,言青爱用
英文版
Copyright2004C.H.
樊工具的安装舆使用
■演示
■VisualStudio2003
■安装
■使用^明(以HeUoWorld!程式来示靶命令列及IDE
操作,明如何使用除金昔器(debugger))
■MSDN
■安装
■MicrosoftPlatformSDK
■安装
Copyright2004C.H.
Windows程式的
■以包装型式来分
■EXE、DLL
■以messageloop来分
■Window>Console
■以.Net的fl念来分
■Managed>Unmanaged(Native)
Copyright2004C.H.
何需DLL?
■DynamicLinkedLibrary
■和UNIX世界中的.sott相似,在轨行的畤候依需要再
载入的程式廛
■同檬的API可供者午多不同的程式叫用
■载入DLL
■DLL和叫用它的程序(process)使用相同的定址空
你可以用implicit或explicit的方式来使用它
■Explicit:用LoadLibrary()MfflAPI来载入DLL
■Implicit:常第一次叫用DLL的API畤,11Windows
自己去找尊加载入DLL
■除演幺柬:DLL版本的Hello,World!程式
Copyright2004C.H.
何BiDLLHeU?
■Rootofallevils:不常的版本控制所造成的悲愿]
■Foo.DLLvl.O有彳固API叫HelloWorld(Foo*A)
■Foo.DLLv2.0也有彳固API叫HelloWorld(Foo2*B),但
Foo2和Foo不一W
■常用到Foo.DLL1.0的程式载入的郤是Foo.DLL2.0畤
就畲彝生常檄的金昔
■如何避免DLLhell
■不要相信微敢他凭「解决」了DLLHell的冏魅,它
徙未真正的解决,只能加以控制
■做好版本控制,碓保API的backwardcompatibility
■「你」才是解决DLLhell的昌附建
Copyright2004C.H.
Windows版的HeUoWorld程式
■HelloWin.c
■clhellowin.cuser32.1ibgdi32.1ib
■Windows程式言殳言十是物件蹲向式的
■程式的主要工作之一^就是虞理各彳固window^的昌射系
(i.e.虑理windowmessage)
■典型的^解:物件醇向程式^言十只能用物件醇向程式
言吾言来完最
■物件醇向程式^言十的意羲是:著眼於作物件之^的
■使用物件醇向程式言吾言,在程式^言十畤较卷便利
(syntacticsugars)
Copyright2004C.H.
Windows程式是如何轨行的?
Copyright2004C.H
Don'tCallMe,ICallYou
■Windows畲主勤来呼叫你的程式,例如戴入畤呼
叫WinMainQ,有乳息暹入畤畲呼叫WndProcQ
■Windows程式利用message来IM月ll各木重不同的
callback,加藉由messagequeue的特性央碓保不畲
有callcontention的情形彝生
■Windows作It系统保者登“Messagescomeinanorderly
synchronizedmanner5?
■Windows程式区里常藉由手笠送message来呼叫自己内
部的函数,而不畲直接叫用
■适檬做的好虑是什麽呢?
Copyright2004C.H.
PreemptiveMultitasking
Copyright2004C.H.
Multi-Thread多绪
■Process(朝l行程序)典thread(朝I行余者)
■process本身不能朝I行,它只是提供安置资源(resource)
的地方
■thread是Windowskernel朝I行程式的最小军位
■程式一始期I行日寺,Windows畲替它建立process,
幺合予一^固mainthreadoProcess中可以建立多彳固thread,
加者襄它相呼同畤轨行
■卷什麽要multi-thread?
■提供较短的回鹰畤避免被耗畤的工作block
■做底号变挥multipleCPU或hyper-threading的能力
Copyright2004C.H.
Message如何周遵各他Thread
SendMessage()PostMessage()
把^息放在奇息彳宁列中,
同直接呼叫视窗函式1
thread然彳爰立刻返回
切换到新轨行女者中加呼叫视窗函PostMessageQ立刻返回,
不同
式。在^^窗函式范束前,^息即被放在另一轨行绪
thread
SendMessage0不畲返回。的^息彳宁列
SynchronousAsynchronous
Copyright2004C.H.
作藕自
Copyright2004C.H.
Don'tbeaPig
■Message分成queued(排P彖型)和non-queued(插除型)丽类真
■Queuedmessages曾被"post"到用程式自己的messagequeue中
■适类直message包括金建然的按如滑鼠的事件、timer信十畤器)、视窗重
以及程式结束(WM_QUIT)
■Non-queuedmessages直接被送到Jffi用程式的WndProcQ
■例如建造window(WM_CREATE),menu逗罩被逗择畤
(\W_COMMAND)
■所以WndProcQ必方直要能保是可以re-entrant的
■Don'tbeapig:GetInandGetOutFast!
■大部份的勤作都靠message来完成,若有一彳固message的虑理非常
花畤那道彳固视窗就曾「没有回鹰」
■举寸於^^的勤作就必须造新的thread来因鹰及虑理
Copyright2004C.H.
ManagedCode?NativeCode?
■需要CLR才能亍的程式不苒卷managedcode(或Mi是,被
编群成MSIL的程式)
■Nativecode是指被编者睾成x86檄器言吾言礁的程式,它可以
是PE格式的EXEtt,也可以是DLL槽
■Managedcode也是以或DLL的型式出现,但它相号有
包一wrapper程式,造彳固wrapper程式畲通知CLR亦接
手适值I程式的轨行(EXE)或载入(DLL)
■微软在.Net的文件中考变明了一彳固新名言可“assembly”,造
彳固字现在代表的尊羲是「可/被载入亍的一小段一
managedcode程式」,它也代表managedcode的基本朝I行
罩位,一彳固EXE或DLL槽中可包入一彳固或数彳固assembly
Copyright2004C.H.
To.NetorNotto.Net?
■.Net在擘理上是较卷侵越的系统
■速度合理(你甚至可以用来离QuakeIT)
■安全性稳定性都高,veryprogrammerfriendly
■但是
■.Netframework的安装和彳占有率不及Windows
■Windows彳占全世界PC95%,但.Net目前不到5%
■.Netframework非常肥(1.1版幺勺12MB,2.0版未知),在
deployment上或多或少造成阻碾
■JRE1.4版才5.8M就一堆人不想装了…
■.Netframework仍未完全成熟
■Windowsform,enterpriseservices,...
Copyright2004C.H.
Windows支援Unicode
#include<stdio.h>
intmain(intargc,char*argv[])
(
printf(''Hello,world!\n,z);
return0;
)
#include<iostream>
#include<tchar.h>
usingnamespacestd;
int_tmain(intargc,_TCHAR*argv[])
{一一
cout«_T(''Hello,world!\n,z)«endl;
return0;
}
Copyright2004C.H.
Windows支援Unicode
■Windows所支援的内礁可分卷三彳固系统
■ANSI,extendedANSI,codepage
■DBCS(multibytecharacters,a.k.a.MBCS)
■Unicode(widechar,wchar_tinC/C++)
■Windows各不重言吾言的版本可自勤地招原来的内石总和
Unicode做曼向串事换(e.g.BIG-5OUnicode)
■英文版除外,你必须自行安装MUI
■和字串有辰哥的WindowsAPI通常都有雨彳固版本
■WINUSERAPIintWINAPIMessageBoxA(HWNDhWnd,
LPCSTRIpText,LPCSTRIpCaption,UINTuType);
■WINUSERAPIintWINAPIMessageBoxW(HWNDhWnd,
LPCWSTRIpTextzLPCWSTRIpCaption,UINTuType);
Copyright2004C.H.
VC++如何虑理Unicode?
■新版C++规格已有规定
■strlen()isforchar,andwcslen()isforwchar_t
■wchar_t的字串必必直以L前醇,e.g.L〃Thisisan
Unicodestring^
■VC++利用巨集(macro)的技巧来减少程式嘉作上的
#ifdef_UNICODE
#define__T(x)L##x
#define_tcslenwcslen
#defineMessageBoxMessageBoxW
#else//ifMBCS
#define__T(x)x
#define_tcslenstrlen
#defineMessageBoxMessageBoxA
#endif
Copyright2004C.H.
I18NSuperFAQ
■字串加不是唯一的冏题
■日期表示、金^^字・・・51些统穗卷locale
■相同的言吾言可能有不同的locale(英文美感|、英文英H)
■.Net提供了非常侵雅的方法来虑理道些冏题
■Unicode不是做H8N的唯一途彳空
■最好勤熊载入localizedresource
■.Net内才是完全Unicode的璟境
■在MBCS典Unicode事事换的言舌
■MultiByteToWideChar()
■WideCharToMultiByte()
Copyright2004C.H.
NamingConvention(命名方式)
■Windows程式以往使用匈牙利命名法
■MSDNhelp:namingconvention,variable
■ms-
help://MS.VSCC.2003/MS.MSDNQTR.2003JUL.1033/dnvsgen/ht
ml/HungaNotat.htm
■VC++程式有很多大嘉的Macro
■如LPINT,善加利用VC++的IntelliSense功能加速熟
悉
■.Net程式没有特意追求namingconvention
■我彳固人依然使用,言青参考CodeComplete或Writing
SolidCode道而本善中举寸namingconvention的探洋寸
Copyright2004C.H.
UI基磁IB念
UI就是UserInterface,要言已住喔
Copyright2004C.H.
Windows的祝受元素
■桌面(desktop)■视窗(window)
■桌面凰格(theme)■檄题列(titlebar)
■檄题(caption)
■工作列(taskbar)■最小化(minimizebutton)
■^始功能表(startmenu)■最大化(maximizebutton)
■原(restorebutton)
■快速做勤(quicklaunch)
■求助(help)
■工作列(tasklist)■框架(frame)
■言吾言列(languagebar)■视窗域(clientarea)
■工具列(tray)■SDI,MDI,multi-SDI
■系统逗罩(systemmenu)
■小畤^(clock)
Copyright2004C.H.
基本的视窗元件
CaptionBarMinimizebutton
WindowTitleMaximize/Restore
SmallIcon
@TheHelloProgramClosebutton
WindowFrame
Hello,World!
ClientArea
Copyright2004C.H.
Windows槽案劣息管
MenuComboBox
(sub-classed)
Picture
•W32PRG
CoolBar
Folders
FoldersName
国JUpigwebhellowin
WindowsProgramming
TreeViewItjExplorer
'+-!OVisualStudioProjects
UW32PRG
JMyComputerListView
田Hoppy(A:)(sub-classed)
国JLocalDisk(C:)
S3work(D:)
MyComputer
ScrollBarResize
StatusBar
Copyright2004C.H.
更^^的靶例
ListBoxSpinControlButton
StaticTextTextBox
LargeIcon(Labels)
Preferences
Scheduler
ConnecttoSQLServer@General
SQLServer:|||
0ConnectionStartTime
Connectusing:
「Windows
Notifications
Statistics
Action
Action
@WebInterface
物ExtendeiSettt
RadioButton,,
CheckBox
kyupyiiynizuu^tn.
视窗兀件(controls)
■每彳固control都是一/固window(更精碓地是child
window)
■微软在裂作Windows畤内建了一些檄型化的视窗元件,S
WindowsCommonControls
■昂外,微软也把丁些常用的举第舌盒檄型化彼做成元件供程
式人具呼叫,不有卷CommonDialogControl
■你也可以裂作自己的control加建用在你自己的程式中
■.NetFramework提供的control大多数是基於Windows
CommonControl的功能,以managedcode符它包装起来
■但少部份或非如此,微敢:直接修改底的control使它可用於
managedcode,因此.Netruntime中曾有些腐於Windows系统的
DLL褶案
Copyright2004C.H.
视窗兀件(controls)
■Control的事件(event)都是透谩windowmessages停
东合父视窗
■C#曾落你虑理道些message,加把封鹰的事件包装成函数的型式
■C++的言乱你得自己来,MFC或WTL可以落你减整一些#1搪
■Controls都有些“Properties”可供^定
■C#常然是以controlobject的property型式存在
■C++即必须透谩API或其他方式来^定
■有些control非常非常例如SaveAs…、Grid
■彳但WindowsXP始有theme的概念
■Theme是用来增弓电祝效果和磨穗程及美工人具用的
■Theme畲影警视窗兀件的lookandfeel
Copyright2004C.H.
WindowsUI的槿^
■傅统的Windows介面
■SDI:SingleDocumentInterface
■HTMLview:SymantecNortonAnti-Virus
■MDI:MultipleDocumentInterface
■Dialog
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 8《网络新世界》(说课稿)-2024-2025学年统编版道德与法治四年级上册
- 学习活动三 参与家乡文化建设 说课稿 2024-2025学年统编版高中语文必修上册
- 二零二五年度宾馆消防安全管理合同范本3篇
- 人教版初中历史与社会八年级上册 2.2 《阿拉伯帝国和伊斯兰文明》说课稿
- 2025年成都沙盘模型生产协议3篇
- 《第17章 电磁波与现代通信》说课稿-2024-2025学年苏科版物理九年级下册
- 人教版八年级历史与社会上册:1.1.1原始先民的家园 说课稿
- 中英合资企业合作合同(2024版)
- 7我们有新玩法 (说课稿)统编版道德与法治二年级下册
- 《小数乘小数》(说课稿)-2024-2025学年四年级上册数学青岛版(五四学制)
- 信息安全意识培训课件
- 2024年项目投资计划书(三篇)
- 配电安规课件
- 中国高血压防治指南(2024年修订版)解读课件
- 沥青路面施工安全培训
- 机电设备安装施工及验收规范
- 仓库安全培训考试题及答案
- 第六单元 中华民族的抗日战争 教学设计 2024-2025学年统编版八年级历史上册
- 初中古诗文言文背诵内容
- 天然气分子筛脱水装置吸附计算书
- 档案管理项目 投标方案(技术方案)
评论
0/150
提交评论