版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Windows程式
(使用C++/C#)
PARTI
徐振家
July2004
Copyright2004C.H.
^程目的輿基碘需求
■目的
■了解Windowsrichclient的嘉作原理典方法
■有能力裂作事渠的程式
■基碘需求
■Windows的操作
■命令列模式-
■巾房戶(account)服矜(services)>^限(privilege)
■C/C++程式^言十
■物件型別(class)典幺鷺承(inheritance)
■虛才疑函數(shù)、虛擦型月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大的系統(tǒng),一般人不太可能
「擘畬」全部的Windowsprogramming
■所以若要迤II的言舌,每檬都畬很花畤^的
Copyright2004C.H.
Java帶來的歌:fl革命
■Java是一槿物件醇向的程式^言
■Javaruntime是一*彳固虛才疑檄器(virtualmachine)加上
軌行畤期程式康(runtimelibrary)
■Java編亙睪器崖生的是intermediatecodeJavabytecode)?
而不是^平臺的原生礁,所以Java可以跨平臺
(因卷跨平臺部份的^度已醇嫁至UJVM的^^者)
■Java較C慢,而且不能直接存取作渠系統(tǒng)的資源
■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(因卷有g(shù)arbage
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系統(tǒng)保者登“Messagescomeinanorderly
synchronizedmanner5?
■Windows程式區(qū)里常藉由手笠送message來呼叫自己內(nèi)
部的函數(shù),而不畬直接叫用
■適檬做的好慮是什麼呢?
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信十畤器)、視窗重
以及程式結(jié)束(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的型式出現(xiàn),但它相號有
包一wrapper程式,造彳固wrapper程式畬通知CLR亦接
手適值I程式的軌行(EXE)或載入(DLL)
■微軟在.Net的文件中考變明了一彳固新名言可“assembly”,造
彳固字現(xiàn)在代表的尊羲是「可/被載入亍的一小段一
managedcode程式」,它也代表managedcode的基本朝I行
罩位,一彳固EXE或DLL槽中可包入一彳固或數(shù)彳固assembly
Copyright2004C.H.
To.NetorNotto.Net?
■.Net在擘理上是較卷侵越的系統(tǒng)
■速度合理(你甚至可以用來離QuakeIT)
■安全性穩(wěn)定性都高,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所支援的內(nèi)礁可分卷三彳固系統(tǒng)
■ANSI,extendedANSI,codepage
■DBCS(multibytecharacters,a.k.a.MBCS)
■Unicode(widechar,wchar_tinC/C++)
■Windows各不重言吾言的版本可自勤地招原來的內(nèi)石總和
Unicode做曼向串事?lián)Q(e.g.BIG-5OUnicode)
■英文版除外,你必須自行安裝MUI
■和字串有辰哥的WindowsAPI通常都有雨彳固版本
■WINUSERAPIintWINAPIMessageBoxA(HWNDhWnd,
LPCSTRIpText,LPCSTRIpCaption,UINTuType);
■WINUSERAPIintWINAPIMessageBoxW(HWNDhWnd,
LPCWSTRIpTextzLPCWSTRIpCaption,UINTuType);
Copyright2004C.H.
VC++如何慮理Unicode?
■新版C++規(guī)格已有規(guī)定
■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些統(tǒng)穗卷locale
■相同的言吾言可能有不同的locale(英文美感|、英文英H)
■.Net提供了非常侵雅的方法來慮理道些冏題
■Unicode不是做H8N的唯一途彳空
■最好勤熊載入localizedresource
■.Net內(nèi)才是完全Unicode的璟境
■在MBCS典Unicode事事?lián)Q的言舌
■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程式?jīng)]有特意追求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
■系統(tǒng)逗罩(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畤內(nèi)建了一些檄型化的視窗元件,S
WindowsCommonControls
■昂外,微軟也把丁些常用的舉第舌盒檄型化彼做成元件供程
式人具呼叫,不有卷CommonDialogControl
■你也可以裂作自己的control加建用在你自己的程式中
■.NetFramework提供的control大多數(shù)是基於Windows
CommonControl的功能,以managedcode符它包裝起來
■但少部份或非如此,微敢:直接修改底的control使它可用於
managedcode,因此.Netruntime中曾有些腐於Windows系統(tǒng)的
DLL褶案
Copyright2004C.H.
視窗兀件(controls)
■Control的事件(event)都是透謾windowmessages停
東合父視窗
■C#曾落你慮理道些message,加把封鷹的事件包裝成函數(shù)的型式
■C++的言亂你得自己來,MFC或WTL可以落你減整一些#1搪
■Controls都有些“Properties”可供^定
■C#常然是以controlobject的property型式存在
■C++即必須透謾API或其他方式來^定
■有些control非常非常例如SaveAs…、Grid
■彳但WindowsXP始有theme的概念
■Theme是用來增弓電祝效果和磨穗程及美工人具用的
■Theme畬影警視窗兀件的lookandfeel
Copyright2004C.H.
WindowsUI的槿^
■傅統(tǒng)的Windows介面
■SDI:SingleDocumentInterface
■HTMLview:SymantecNortonAnti-Virus
■MDI:MultipleDocumentInterface
■Dialog
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年智能交通系統(tǒng)建設股權(quán)認購與技術(shù)服務合同3篇
- 2024年航天飛行器零部件制造合同
- 《章化學平衡》課件
- 2024年特色教育項目引進協(xié)議
- 2024幼兒園教師崗位聘任及培訓發(fā)展合同范本3篇
- 2024快遞公司為電商提供的快遞配送服務合同
- 2024年物業(yè)管理戰(zhàn)略合作合同
- 2024年項目股權(quán)收購合同:公司股權(quán)轉(zhuǎn)讓協(xié)議
- 2025版礦業(yè)機械購置合同范本3篇
- 臨時研發(fā)工程師合同樣本
- 水利小型農(nóng)田水利工程質(zhì)量評定常用表式
- 抽氨施工方案
- 量具重復性和再現(xiàn)性數(shù)據(jù)表
- 南方常見植物-時花
- 特許經(jīng)營管理手冊范本(餐飲)
- 大學生旅游問卷調(diào)研報告
- 支原體檢驗報告
- 施工現(xiàn)場安全監(jiān)督要點
- 單位物業(yè)服務項目投標方案(技術(shù)標)
- 工程預結(jié)算課件
- 酒店宴會合同范本
評論
0/150
提交評論