?? chap1_3.htm
字號:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<title>Windows應用程序設計的特點</title>
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#3973DE" alink="#3973DE"
style="text-decoration: none" background="../bg.gif">
<div align="center"><center>
<table border="0" width="85%" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF">
<tr>
<td><div align="center"><center><table border="0" width="615" cellpadding="0"
cellspacing="0">
<tr>
<td width="266" bgcolor="#15397D"></td>
<td width="349" bgcolor="#000000"><p align="right"><a href="../index.htm"><strong><font
COLOR="red">電腦報網絡學院Visual C++網絡教程</font></strong></a> </td>
</tr>
</table>
</center></div><p ALIGN="CENTER"><b><font SIZE="3"><br>
</font><font color="#3973DE" FACE="Times New Roman" SIZE="3">1.3 Windows</font><font
SIZE="3" color="#3973DE">應用程序設計的特點</font></b></p>
<p><span style="font-size: 9pt"> 如前所述,Windows操作系統具有MS-DOS操作系統無可比擬的優點,因而受到了廣大軟件開發人員的親睞。但是,熟悉DOS環境下軟件開發的程序員很快就會發現,Windows編程與DOS環境下編程相比有很大的不同。Windows要求以一種全新的思維方式進行程序設計,主要表現為以下幾點:</span></p>
<p><span style="font-size: 9pt"><b>1.3.1事件驅動的程序設計</b></span></p>
<p><span style="font-size: 9pt"> 傳統的MS-DOS程序主要采用順序的、關聯的、過程驅動的程序設計方法。一個程序是一系列預先定義好的操作序列的組合,它具有一定的開頭、中間過程和結束。程序直接控制程序事件和過程的順序。這樣的程序設計方法是面向程序而不是面向用戶的,交互性差,用戶界面不夠友好,因為它強迫用戶按照某種不可更改的模式進行工作。它的基本模型如圖1.1所示。<br>
事件驅動程序設計是一種全新的程序設計方法,它不是由事件的順序來控制,而是由事件的發生來控制,而這種事件的發生是隨機的、不確定的,并沒有預定的順序,這樣就允許程序的的用戶用各種合理的順序來安排程序的流程。對于需要用戶交互的應用程序來說,事件驅動的程序設計有著過程驅動方法無法替代的優點。它是一種面向用戶的程序設計方法,它在程序設計過程中除了完成所需功能之外,更多的考慮了用戶可能的各種輸入,并針對性的設計相應的處理程序。它是一種“被動”式程序設計方法,程序開始運行時,處于等待用戶輸入事件狀態,然后取得事件并作出相應反應,處理完畢又返回并處于等待事件狀態。它的框圖如圖1.2所示:<br>
在圖中,輸入界面1-4并沒有固定的順序,用戶可以隨機選取,以任何合理的順序來輸入數據。</span></p>
<p ALIGN="CENTER"><span style="font-size: 9pt"><img src="T1_1.gif"
alt="T1_1.tif (69737 bytes)" WIDTH="189" HEIGHT="321"></span></p>
<p ALIGN="CENTER"><span style="font-size: 9pt">圖1.1 過程驅動模型</span></p>
<p ALIGN="CENTER"><span style="font-size: 9pt"><img src="T1_2.gif"
alt="T1_2.tif (200700 bytes)" WIDTH="565" HEIGHT="302"></span></p>
<b><p ALIGN="CENTER"><span style="font-size: 9pt">圖<small>1.2</small>事件驅動程序模型</span></b></p>
<p><span style="font-size: 9pt"><b>1.3.2 消息循環與輸入</b></span></p>
<p><span style="font-size: 9pt">
事件驅動圍繞著消息的產生與處理展開,一條消息是關于發生的事件的消息。事件驅動是靠消息循環機制來實現的。<br>
消息是一種報告有關事件發生的通知。<br>
消息類似于DOS下的用戶輸入,但比DOS的輸入來源要廣,Windows應用程序的消息來源有以下四種:<br>
(1)輸入消息:包括鍵盤和鼠標的輸入。這一類消息首先放在系統消息隊列中,然后由Windows將它們送入應用程序消息隊列中,由應用程序來處理消息。<br>
(2)控制消息:用來與Windows的控制對象,如列表框、按鈕、檢查框等進行雙向通信。當用戶在列表框中改動當前選擇或改變了檢查框的狀態時發出此類消息。這類消息一般不經過應用程序消息隊列,而是直接發送到控制對象上去。<br>
(3)系統消息:對程序化的事件或系統時鐘中斷作出反應。一些系統消息,象DDE消息(動態數據交換消息)要通過Windows的系統消息隊列,而有的則不通過系統消息隊列而直接送入應用程序的消息隊列,如創建窗口消息。<br>
(4)用戶消息:這是程序員自己定義并在應用程序中主動發出的,一般由應用程序的某一部分內部處理。<br>
在DOS應用程序下,可以通過getchar()、getch()等函數直接等待鍵盤輸入,并直接向屏幕輸出。而在Windows下,由于允許多個任務同時運行,應用程序的輸入輸出是由Windows來統一管理的。<br>
Windows操作系統包括三個內核基本元件:GDI, KERNEL ,USER。其中GDI(圖形設備接口)負責在屏幕上繪制像素、打印硬拷貝輸出,繪制用戶界面包括窗口、菜單、對話框等。系統內核KERNEL支持與操作系統密切相關的功能:如進程加載,文本切換、文件I/O,以及內存管理、線程管理等。USER為所有的用戶界面對象提供支持,它用于接收和管理所有輸入消息、系統消息并把它們發給相應的窗口的消息隊列。消息隊列是一個系統定義的內存塊,用于臨時存儲消息;或是把消息直接發給窗口過程。每個窗口維護自己的消息隊列,并從中取出消息,利用窗口函數進行處理。框圖如下:</span></p>
<p ALIGN="CENTER"><span style="font-size: 9pt"><img src="T1_3.gif"
alt="T1_3.tif (207496 bytes)" WIDTH="456" HEIGHT="327"></span></p>
<p ALIGN="CENTER"><span style="font-size: 9pt">圖1.3 消息驅動模型</span></p>
<p><span style="font-size: 9pt"> </span></p>
<p><span style="font-size: 9pt"> </span></p>
<p><span style="font-size: 9pt"><b>1.3.3 圖形輸出</b></span></p>
<p><span style="font-size: 9pt"> Windows程序不僅在輸入上與DOS程序不同,而且在程序輸出上也與DOS有著很大不同,主要表現為:<br>
1.DOS程序獨占整個顯示屏幕,其他程序在后臺等待。而Windows的每一個應用程序對屏幕的一部分進行處理。DOS程序可以直接往屏幕上輸出,而Windows是一個多窗口的操作系統,由操作系統來統一管理屏幕輸出;每個窗口要輸出內容時,必須首先向操作系統發出請求(GDI請求),由操作系統完成實際的屏幕輸出工作。<br>
2.Windows程序的所有輸出都是圖形。Windows提供了豐富的圖形函數用于圖形輸出,這對輸出圖形是相當方便的,但是由于字符也被作為圖形來處理,輸出時的定位要比DOS復雜的多。<br>
比如,在DOS字符方式下,我們可以寫出如下程序用于輸出兩行文字:<br>
printf(“Hello,\n”);<br>
printf(“This is DOS program.\n”);<br>
而在Windows下要輸出這兩行文字所做的工作要復雜的多。因為Windows輸出是基于圖形的,它輸出文本時不會象DOS那樣自動換行,而必須以像素為單位精確定位每一行的輸出位置。另外,由于Windows提供了豐富的字體,所以在計算坐標偏移量時還必須知道當前所用字體的高度和寬度。<br>
3.Windows下的輸出是設備無關的。在DOS下編寫過Foxpro程序的讀者常常會有這樣的體會,在編寫打印報表程序時,要針對不同的打印機在程序中插入不同的打印控制碼,用以控制換頁、字體設置等選項。這樣的程序編寫起來繁瑣,而且不容易移植(因為換一臺不同型號的打印機就要重新修改程序)。而Windows下的應用程序使用圖形設備接口(GDI)來進行圖形輸出。GDI屏蔽了不同設備的差異,提供了設備無關的圖形輸出能力,Windows應用程序只要發出設備無關的GDI請求(如調用Rectangle畫一個矩形),由GDI去完成實際的圖形輸出操作。對于一臺具有打印矩形功能的PostScript打印機來說,GDI可能只需要將矩形數據傳給驅動程序就可以了,然后由驅動程序產生PostScript命令繪制出相應的矩形;而對于一臺沒有矩形輸出功能的點陣打印機來說,GDI可能需要將矩形轉化為四條線,然后向驅動程序發出畫線的指令,在打印機上輸出矩形。當然,這兩種輸出在用戶看來并沒有什么區別。<br>
Windows的圖形輸出是由圖形設備接口(GDI)來完成的,GDI是系統原始的圖形輸出庫,它用于在屏幕上輸出像素、在打印機上輸出硬拷貝以及繪制Windows用戶界面。<br>
GDI提供兩種基本服務:創建圖形輸出和存儲圖象。GDI提供了大量用于圖形輸出的函數,這些函數接收應用程序發出來的繪圖請求、處理繪圖數據并根據當前使用設備調用相應的設備驅動程序產生繪圖輸出。這些繪圖函數分為三類:一是文字輸出,二是矢量圖形函數,用于畫線、圓等幾何圖形,三是光柵(位圖)圖形函數,用于繪制位圖。<br>
GDI識別四種類型的設備:顯示屏幕、硬拷貝設備(打印機、繪圖機)、位圖和圖元文件。前兩者是物理設備,后兩者是偽設備。一個偽設備提供了一種在RAM里或磁盤里存儲圖象的方法。位圖存放的是圖形的點位信息,占用較多的內存,但速度很快。圖元文件保存的是GDI函數的調用和調用參數,占用內存較少,但依賴于GDI,因此不可能用某個設備來創建圖元文件,而且速度比位圖要慢。<br>
GDI的圖形輸出是面向窗口的,面向窗口包含兩層含義:<br>
(1)每個窗口作為一個獨立的繪圖接口來處理,有它自己的繪圖坐標。當程序在一個窗口中繪圖時,首先建立缺省的繪圖坐標,原點(0,0)位于窗口用戶區的左上角。每個窗口必須獨立的維護自己的輸出。<br>
(2)繪圖僅對于本窗口有效,圖形在窗口邊界會被自動裁剪,也就是說窗口中的每一個圖形都不會越出邊界。即使想越出邊界,也是不可能的,窗口會自動的防止其他窗口傳過來的任何像素。這樣,你在窗口內繪圖時,就不必擔心會偶然覆蓋其他程序的窗口,從而保證了Windows下同時運行多個任務時各個窗口的獨立性。</span></p>
<p><span style="font-size: 9pt"><b>1.3.4 用戶界面對象</b></span></p>
<p><span style="font-size: 9pt"> Windows支持豐富的用戶接口對象,包括:窗口、圖標、菜單、對話框等等。程序員只需簡單的幾十行代碼,就可以設計出一個非常漂亮的圖形用戶界面。而在DOS環境下,則需要大量的代碼來完成同樣的工作,而且效果也沒有Windows提供的那么好。下面我們介紹一下用戶界面對象中的一些術語和相關概念。</span></p>
<p><span style="font-size: 9pt"><b>窗口</b></span></p>
<p><span style="font-size: 9pt">
窗口是用戶界面中最重要的部分。它是屏幕上與一個應用程序相對應的矩形區域,是用戶與產生該窗口的應用程序之間的可視界面。每當用戶開始運行一個應用程序時,應用程序就創建并顯示一個窗口;當用戶操作窗口中的對象時,程序會作出相應反應。用戶通過關閉一個窗口來終止一個程序的運行;通過選擇相應的應用程序窗口來選擇相應的應用程序。一個典型的窗口外觀如圖1.4所示。</span></p>
<p align="center"><span style="font-size: 9pt"><img src="T1_4.jpg"
alt="T1_4.jpg (15734 bytes)" WIDTH="469" HEIGHT="324"></span></p>
<p align="center"><span style="font-size: 9pt">圖1.4 窗口</span></p>
<p><span style="font-size: 9pt"><b>邊框</b></span></p>
<p><span style="font-size: 9pt">
絕大多數窗口都有一個邊框,用于指示窗口的邊界。同時也用來指明該窗口是否為活動窗口,當窗口活動時,邊框的標題欄部分呈高亮顯示。用戶可以用鼠標拖動邊框來調整窗口的大小。</span></p>
<p><span style="font-size: 9pt"><b>系統菜單框</b></span></p>
<p ALIGN="JUSTIFY"><span style="font-size: 9pt">
系統菜單框位于窗口左上角,以當前窗口的圖標方式顯示,用鼠標點一下該圖標(或按ALT+空格鍵)就彈出系統菜單。系統菜單提供標準的應用程序選項,包括:Restore(還原窗口原有的大小),Move(使窗口可以通過鍵盤上的光標鍵來移動其位置),Size(使用光標鍵調整窗口大小),Minimize(將窗口縮成圖標),Maximize(最大化:使窗口充滿整個屏幕)和Close(關閉窗口)。</span></p>
<p><span style="font-size: 9pt"><b>標題欄</b></span></p>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -