c计算机语言学习_第1页
c计算机语言学习_第2页
c计算机语言学习_第3页
c计算机语言学习_第4页
c计算机语言学习_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论