c計算機語言學習_第1頁
c計算機語言學習_第2頁
c計算機語言學習_第3頁
c計算機語言學習_第4頁
c計算機語言學習_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論