版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、本科畢業(yè)設(shè)計(jì)(論文) 題目名稱: VC多窗口處理技術(shù)的研究 學(xué) 院: 計(jì)算機(jī)科學(xué)技術(shù) 專業(yè)年級(jí): 計(jì)算機(jī)科學(xué)與技術(shù)(師范) 摘 要自從美國Xerox Palo Alto Research Center的STAR計(jì)算機(jī)采用多窗口技術(shù)和鼠標(biāo)作為用戶接口以來,多窗口技術(shù)作為一種改善人機(jī)接口的手段,已開始流行。在計(jì)算機(jī)的各種應(yīng)用中,經(jīng)常要多個(gè)不同的應(yīng)用程序進(jìn)行互相配合,共同完成某項(xiàng)工作。多窗口技術(shù)使用戶能在一個(gè)顯示屏幕上,同時(shí)看到幾個(gè)應(yīng)用程序,并在各應(yīng)用程序之間進(jìn)行隨意切換,從而極大地方便了使用者。本文依托“三維可視化”項(xiàng)目的系統(tǒng)框架,進(jìn)行了多窗口處理技術(shù)的研究。軟件系統(tǒng)包含了一般的多窗口處理技術(shù),V
2、C中視圖(窗口)的動(dòng)態(tài)分割處理技術(shù),自定義多窗口處理技術(shù)對(duì)圖像進(jìn)行處理和顯示。通過文件預(yù)覽模塊、查看模塊、系統(tǒng)控制模塊、算法功能模塊、窗口顯示模塊來實(shí)現(xiàn)整個(gè)系統(tǒng)的功能。多窗口處理技術(shù)已成為設(shè)計(jì)用戶界面的重要手段地位,許多基于窗口技術(shù)開發(fā)用戶界面的應(yīng)用程序,其用戶界面部分與應(yīng)用核心部分沒有徹底分離,難于移植。因此,在采用多窗口技術(shù)設(shè)計(jì)用戶界面時(shí),提出窗口框架與窗口信息相分離的方法,窗口信息以文件形式存貯,不僅使用戶界面部分獨(dú)立于應(yīng)用核心部分,而且允許用戶參與定義窗口顏色、各級(jí)窗口內(nèi)同及每一菜單項(xiàng)所對(duì)應(yīng)的子功能的函數(shù)名,系統(tǒng)集菜單選擇窗口、幫助信息窗口,編輯信息區(qū)窗口于一體,滿足多數(shù)應(yīng)用程序的用戶
3、界面需要,加快軟件開發(fā)周期,統(tǒng)一用戶界面風(fēng)格。關(guān)鍵詞:接口;多窗口處理技術(shù);用戶界面AbstractSince the Xerox Palo Alto Research Center USASTAR computer using multi-window technique and the mouse as a user interface, multi window technology as a means of improving the man-machine interface, have begun to pop.In a variety of applications, ofte
4、n to a number of different applications to cooperate with each other, to complete a job. Multi window technology can help users on a display screen, see several applications at the same time, and can switch between the application programs, which is greatly convenient for users.This paper is based o
5、n the visualization project system framework, the processing technology of multi-window. The software system includes multiple window processing technology in general, VC view (window) dynamic segmentation processing technology, processing and display the image of custom window processing technology
6、. Through the file preview module, check module, system control module, algorithm modules, window display module to realize the function of the system.Multi-window processing technology has become an important means of status of user interface design, many application window technology development b
7、ased on user interface, the user interface part and application of core part not completely separated, it is difficult to transplant. Therefore, using multi-window user interface design, method of window frame and window information phase separation is proposed, the window information storage in the
8、 form of a document, not only the user interface application independent core part, and allows the user to participate in defining the window color, all window with each menu item and the corresponding sub function the name of the function, the system set menu selection window, the help information
9、window, edit the information window in one, meet most application user interface, speed up the cycle of software development, unified user interface style.Key word:Interface; Processing Technology of multi-window; The user Interface目 錄摘 要IAbstractII第1章 緒 論11.1 多窗口處理技術(shù)概述11.2 多窗口處理技術(shù)應(yīng)用2第2章 多窗口的創(chuàng)建與處理技術(shù)
10、32.1 窗口的創(chuàng)建過程32.1.1 系統(tǒng)框架窗口的創(chuàng)建32.1.2 自定義窗口的創(chuàng)建32.2 多窗口處理技術(shù)62.2.1 窗口的分割技術(shù)62.2.2 主窗口處理技術(shù)82.2.3 自定義窗口處理技術(shù)9第3章 VC+多窗口處理界面143.1 多窗口界面基本思想143.2 處理結(jié)果173.3 討論17第4章 多窗口處理技術(shù)的展望18結(jié) 論20致 謝21參考文獻(xiàn)22附 錄23第1章 緒 論1.1 多窗口處理技術(shù)概述個(gè)性化的程序離不開個(gè)性化的界面設(shè)計(jì),界面編程不僅是編程,也是藝術(shù)。在程序設(shè)計(jì)中也有一句經(jīng)典的說法:對(duì)于一個(gè)好的應(yīng)用程序而言,界面設(shè)計(jì)部分的代碼應(yīng)該占總程序代碼的60%,所以界面設(shè)計(jì)在程序設(shè)
11、計(jì)中占有相當(dāng)?shù)姆至颗c地位。窗口分為三類:菜單窗口、編輯窗口和幫助窗口。菜單窗口提供給用戶選擇功能;編輯窗口提供給用戶錄入信息;幫助窗口提供給用戶了解本項(xiàng)操作的信息;從內(nèi)存使用效率、運(yùn)行速度、通用性上考慮,提出采用窗口框架和顯示信息分離的技術(shù),窗口框架包括窗口類型、窗口顯示位置大小、窗口顏色、窗口標(biāo)識(shí)符名稱和指向保存窗口顯示圖像信息區(qū)的首地址,每一個(gè)窗口框架占內(nèi)存信息、且用一條雙向鏈表管理,窗口框架的插入和刪除分別在鏈表尾部進(jìn)行,窗口之間允許全部或局部覆蓋,系統(tǒng)還采用存貯和重放技術(shù),窗口顯示信息頁,相應(yīng)分為三類:菜單信息、編輯信息和幫助信息。同時(shí),系統(tǒng)開辟相應(yīng)三個(gè)系統(tǒng)工作區(qū)即:菜單信息區(qū),幫助信
12、息區(qū)和編輯工作區(qū),系統(tǒng)還設(shè)置了三個(gè)當(dāng)前活動(dòng)窗口工作區(qū),以便使系統(tǒng)工作區(qū)可以動(dòng)態(tài)申請(qǐng)和釋放。窗口顯示信息時(shí)根據(jù)窗口類型及其功能自動(dòng)搜索相應(yīng)系統(tǒng)工作中的內(nèi)容,找出匹配的信息送到當(dāng)前活動(dòng)窗口工作區(qū),窗口框架大小由窗口類型和窗口顯示信息內(nèi)容和自動(dòng)調(diào)整。多窗口處理技術(shù)近年來,作為一種新技術(shù)用以改變?nèi)藱C(jī)接口手段,各種窗口軟件大多數(shù)出現(xiàn)在功能很強(qiáng)的位映像在計(jì)算機(jī)中,它可以將圖形標(biāo)準(zhǔn)軟件包中的應(yīng)用程序和其他實(shí)用程序同時(shí)在不同的窗口中顯示和運(yùn)行。多窗口是指在一個(gè)屏幕中劃分幾個(gè)區(qū)域,讓每個(gè)區(qū)域執(zhí)行不同的作業(yè)和多種數(shù)據(jù)表示方法。我們?cè)趯?shí)際應(yīng)用程序開發(fā)時(shí),多窗口處理技術(shù)即在一個(gè)主程序界面中,為了數(shù)據(jù)處理方便通常要在多
13、個(gè)窗口中同時(shí)處理。因此,多窗口處理技術(shù)是工程實(shí)踐中非常關(guān)鍵的一個(gè)技術(shù)。當(dāng)計(jì)算機(jī)發(fā)送每一個(gè)數(shù)據(jù)段時(shí),都必須等待確認(rèn),數(shù)據(jù)的傳輸?shù)乃俾示妥兟?。單在?jì)算機(jī)發(fā)送數(shù)據(jù)段之后,以及在它接受到已接收的信息時(shí),有一段時(shí)間間隔,回用于接收方確認(rèn),發(fā)送方可以利用這個(gè)間隔來發(fā)送更多的數(shù)據(jù)。所以,發(fā)送方在沒有接收到已發(fā)送數(shù)據(jù)的確認(rèn)時(shí),被允許發(fā)送的數(shù)據(jù)段的數(shù)量就稱為“窗口”。窗口是屏幕上的一個(gè)矩形區(qū)域,應(yīng)用程序在該區(qū)域中顯示數(shù)據(jù)并等待鼠標(biāo)點(diǎn)擊。Windows應(yīng)用系統(tǒng)的用戶界面可以包含許多窗口,每個(gè)窗口都有不同的特點(diǎn),但都是互相關(guān)聯(lián)的。在這么多窗口中,基本類型只有三種:重疊(Oberlapped)窗口,彈出(Popup
14、)窗口和子窗口(Child)。在它們之間并沒有太多內(nèi)在的差異,但是使用不同的窗口風(fēng)格,它們的外觀是不同的。多窗口處理技術(shù)是圖像處理技術(shù)中的基礎(chǔ)界面技術(shù),多窗口處理技術(shù)需要具有良好的硬件操作能力和內(nèi)存管理能力?;赩C的多窗口處理技術(shù)可以在內(nèi)存處理和硬件接口方面留有充分的擴(kuò)充余地,方便、快捷、易于管理和擴(kuò)充的界面技術(shù),有利于對(duì)計(jì)算機(jī)圖像與軟件處理算法的實(shí)現(xiàn)和仿真。1.2 多窗口處理技術(shù)應(yīng)用計(jì)算機(jī)的發(fā)展速度,讓人望而生畏,在短短的幾十年里,創(chuàng)造出了巨大的成就,多窗口處理技術(shù)也在一點(diǎn)點(diǎn)被發(fā)覺,如今已經(jīng)成為研究領(lǐng)域中熱門項(xiàng)目。它目前的應(yīng)用領(lǐng)域之廣,已經(jīng)是有目共睹。自從Xerox公司首先在 STAR工作
15、站上推出多窗口圖形系統(tǒng)以來,多窗口軟件得到了很大發(fā)展。現(xiàn)在多窗口軟件處理技術(shù)是所有軟件系統(tǒng)設(shè)計(jì)中的支撐。多窗口軟件處理技術(shù)不僅為用戶提供了良好的用戶界面和集成的操作環(huán)境。而且能夠大大增強(qiáng)軟件的使用效率和實(shí)用性。目前人機(jī)界面的標(biāo)準(zhǔn)越來越趨向于WINDOWS風(fēng)格的多窗口顯示技術(shù)。這種 顯示技術(shù)在有限的物理視屏上,通過多個(gè)窗口的顯示增大了用戶的作業(yè)視野,提高 人機(jī)界面的友好性。隨著網(wǎng)絡(luò)技術(shù)的普及,網(wǎng)絡(luò)監(jiān)視系統(tǒng)、視頻會(huì)議系統(tǒng)這種多窗口畫面顯示系統(tǒng)的應(yīng)用越來越廣泛。各種CAD工作站,其中多窗口處理技術(shù)為發(fā)展CAD用戶接口提供了開放環(huán)境。生活中的智能手機(jī)也在慢慢的趨近多窗口化,以至于讓人們用著更方便、操作
16、更簡(jiǎn)便、視野更直觀。計(jì)算機(jī)已經(jīng)融入到了大部分人的生活中,隨著人們?nèi)找嬖鲩L(zhǎng)的物質(zhì)、文化需要,在不停的成長(zhǎng)著,在日常生活中、軍事上、醫(yī)療和工業(yè)上等許多領(lǐng)域得到了廣泛的應(yīng)用。已是人們生活需要不可或缺的一部分。第2章 多窗口的創(chuàng)建與處理技術(shù)2.1 窗口的創(chuàng)建過程窗口的創(chuàng)建分為系統(tǒng)框架窗口和自定義窗口,系統(tǒng)框架創(chuàng)建:基于VC+開發(fā)工具的功能,根據(jù)開發(fā)工具的向?qū)б约坝脩酎c(diǎn)選所需要的功能,所自動(dòng)生成的統(tǒng)一VC窗口。自定義窗口:根據(jù)用戶或者開發(fā)人員自身需要,獨(dú)立創(chuàng)建的窗口。2.1.1 系統(tǒng)框架窗口的創(chuàng)建系統(tǒng)框架窗口在VC+中是一種自動(dòng)系統(tǒng)生成的窗口,創(chuàng)建簡(jiǎn)便方式如下: 打開Visual C+6.0 選擇Fil
17、e菜單的New,在出現(xiàn)的對(duì)話框中,選擇Projects欄目(新建工程),并點(diǎn)擊下面的Win32 Application項(xiàng),表示使用Win32環(huán)境創(chuàng)建應(yīng)用程序,先Locatin(路徑)中填入“C:”,然后在Project Name(項(xiàng)目名稱)中填入“HelloWin”,其它按照缺省設(shè)置。單擊OK按鈕,完成。 根據(jù)系統(tǒng)下提示的向?qū)В凑誷tep1-step6頁面中的功能,自主勾選所需要的功能,點(diǎn)擊下一步直到完成,開發(fā)軟件會(huì)自動(dòng)生成一個(gè)系統(tǒng)窗口。 再次選擇File菜單的New,在出現(xiàn)的對(duì)話框中,選擇Files欄目(新建文件),并點(diǎn)擊下面的C+ Source File項(xiàng),表示新建一個(gè)C+源文件。在右邊
18、的File欄中輸入“HelloWin”,最后確定讓Add to project框上打上勾。單擊OK按鈕完成。由于系統(tǒng)框架窗口創(chuàng)建比較簡(jiǎn)單,此處就不在多加介紹,接下來我會(huì)詳細(xì)介紹自定義窗口的創(chuàng)建過程。2.1.2 自定義窗口的創(chuàng)建自定義窗口的創(chuàng)建過程需要四個(gè)步驟,下面列出了創(chuàng)建步驟和這個(gè)過程中涉及的類和函數(shù):1. 設(shè)計(jì)一個(gè)窗口類/很多特征(光標(biāo),圖標(biāo),背景)WNDCLASS2. 注冊(cè)窗口類/Register Class3. 創(chuàng)建窗口/首先定義句柄 如:HWND hwnd; Create Window4. 顯示及更新窗口/顯示窗口:Show Window,更新窗口:Update Window。(1)
19、設(shè)計(jì)一個(gè)窗口類一個(gè)完整的窗口的具有許多特征,包括光標(biāo)(鼠標(biāo)進(jìn)入該窗口時(shí)的形狀)、圖標(biāo)、背景色等。窗口的創(chuàng)建過程類似汽車的制造過程。我們?cè)谏a(chǎn)一個(gè)型號(hào)的汽車之前,首先要對(duì)該型號(hào)的汽車進(jìn)行設(shè)計(jì),在圖紙上畫出汽車的結(jié)構(gòu)圖,設(shè)計(jì)各個(gè)零件,同時(shí)還要給該型號(hào)的汽車取一個(gè)響亮的名字。類似地,在創(chuàng)建一個(gè)窗口前,也必須對(duì)該類型的窗口進(jìn)行設(shè)計(jì),指定窗口的特征。當(dāng)然,在我們?cè)O(shè)計(jì)一個(gè)窗口時(shí),不像汽車的設(shè)計(jì)那么復(fù)雜,因?yàn)閃indows已經(jīng)為我們定義好了一個(gè)窗口所應(yīng)具有的基本屬性,我們只需要像考試時(shí)做填空題一樣,將我們填充的部分填寫完整,一種窗口就設(shè)計(jì)好了。在VC+中,窗口的定義結(jié)構(gòu)體是由WNDCLASS來完成的,WND
20、CLASS結(jié)構(gòu)體定義如下:Typedef Struct_WNDCLASSUINT style,WNDPROC lpfnWndProc,Int cbClsExtra,Int cbWndExtra,HANDLE hinstance,HICON hicon,HCUROSR hCursor,HBRUSH hbrBackground,LPCTSTR lpszMenuName,LPCTSTR lpszClassName,WNDCLASS;(2) 注冊(cè)窗口類 一個(gè)應(yīng)用程序可以有許多窗口,單只有一個(gè)主窗口,它是與該程序的實(shí)例句柄唯一關(guān)聯(lián)的。通常要對(duì)填充一個(gè)窗口類結(jié)構(gòu)WNDCLASS,然后調(diào)用RegisterC
21、lass()對(duì)該窗口類進(jìn)行注冊(cè)。每個(gè)窗口都有一些基本屬性,如窗口標(biāo)題欄文字、窗口大小和位置、鼠標(biāo)、背景色、處理窗口消息函數(shù)的名稱等等。注冊(cè)的過程也就是將這些屬性告訴系統(tǒng),然后調(diào)用CreateWindow()函數(shù)創(chuàng)建出窗口。注冊(cè)函數(shù)的原型聲明如下:ATOM RegisterClass (CONST WNDCLASS *lpWndClass);當(dāng)用戶創(chuàng)建一個(gè)窗口類時(shí),實(shí)際上只是在三個(gè)操作系統(tǒng)列表之一中注冊(cè)一個(gè)WNDCLASS結(jié)構(gòu)嗎。系統(tǒng)為每個(gè)類類型維護(hù)一個(gè)列表:系統(tǒng)全局類(System Global Class)在系統(tǒng)啟動(dòng)時(shí)注冊(cè),且必須注冊(cè),對(duì)所有應(yīng)用程序都有效。應(yīng)用程序全局類(Applicati
22、on Global Class)由應(yīng)用程序注冊(cè),只對(duì)應(yīng)用程序及應(yīng)用程序的線程有效。應(yīng)用程序局部類(Application Local Class)由應(yīng)用程序注冊(cè),并只對(duì)注冊(cè)它們的應(yīng)用程序或DLL有效。當(dāng)系統(tǒng)搜索一個(gè)窗口類時(shí),從應(yīng)用程序局部類開始,然后搜索應(yīng)用程序全局類,最后搜索系統(tǒng)全局類。要?jiǎng)?chuàng)建一個(gè)窗口類,可以先創(chuàng)建WNDCLASS結(jié)構(gòu)的實(shí)例,然后用MFC類庫的AfxRegisterClass()注冊(cè)它。也可以用MFC類庫的AfxRegisterWndClass()來創(chuàng)建一個(gè)基于調(diào)用參數(shù)的WNDCLASS對(duì)象。(3) 創(chuàng)建窗口設(shè)計(jì)好窗口并且將其成功或注冊(cè)之后,就可以用CreateWindow函
23、數(shù)產(chǎn)生這種類型的窗口了。產(chǎn)生窗口的過程是由操作系統(tǒng)完成的,如果在調(diào)用CreateWindow函數(shù)之前,沒有用Register Class函數(shù)注冊(cè)過,操作系統(tǒng)將無法得知這一類型窗口的相關(guān)信息,從而導(dǎo)致創(chuàng)建窗口失敗。CreateWindow函數(shù)的原型聲明如下:HWND CreateWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName,DWORD dwStyle,Int x,Int y,Int nWidth,Int nHeight,HWND hWndParent,HMENU hMenu,HANDLE hinstance,LPVOID lpParam);(4)
24、 顯示窗口消息創(chuàng)建后,并不會(huì)再屏幕上顯示出來,要真正把窗口顯示在屏幕上,還得使用ShowWindow()函數(shù),由于ShowWindow()函數(shù)的執(zhí)行優(yōu)先級(jí)不高,所以當(dāng)系統(tǒng)正忙著執(zhí)行其它的任務(wù)時(shí),窗口不會(huì)立即顯示出來,此時(shí),調(diào)用UpdateWindow()函數(shù)以可以立即顯示窗口。函數(shù)原型聲明如下所示:BOOL ShowWindow(HWND hWnd,Int nCmdShow);BOOL UpdateWindow(HWND hWnd, ); 2.2 多窗口處理技術(shù)現(xiàn)在對(duì)于軟件中窗口的處理技術(shù)分為三類:1. 基于系統(tǒng)框架窗口,通過spllitter控件進(jìn)行分割的處理技術(shù)。2. 基于所有窗口都為主窗
25、口的處理技術(shù)。3. 基于根據(jù)用戶和開發(fā)需要自定義的處理技術(shù)。2.2.1 窗口的分割技術(shù)(1) 窗口創(chuàng)建參照2.1.1系統(tǒng)框架窗口創(chuàng)建的內(nèi)容。(2) Splitter控件描述這個(gè)容器控件包含有一個(gè)可移動(dòng)并且可折疊的條,它可以將該容器控件的顯示區(qū)域分成兩個(gè)可調(diào)整大小的面板。分離器是可以被無限嵌套下去的,可以為你在UI設(shè)計(jì)上提供無限的可能性。使用Splitter分離器的嵌套功能,可以將大量的數(shù)據(jù)整理在一個(gè)頁面內(nèi)。C1Splitter控件使你可以嵌套任何方位類型的多個(gè)部分,并且,在你調(diào)整面板大小的時(shí)候,可以允許你為嵌套的分離器調(diào)整大小,如下圖:Splitter控件用于重新設(shè)置??吭谄渖系钠渌丶拇笮?/p>
26、。一個(gè)典型的示例是Windows資源管理器右邊的列表視圖和左邊的樹形視圖之間的分隔欄。當(dāng)把鼠標(biāo)指針放在分隔欄上時(shí),光標(biāo)會(huì)改變,用戶可以單擊分隔欄,把它向上下或左右拖動(dòng)。 圖2-1 window資源管理器可以設(shè)置MinSize和MinExtra屬性,限制分隔欄可以移動(dòng)的距離。其區(qū)別是MinSize屬性指定在分隔欄和分隔欄所在的容器邊界之間最小距離(單位是像素)。MinExtra屬性指定容器的對(duì)邊和分隔欄之間的距離(單位是像素)。用Position屬性可以設(shè)置最初位置。如果分隔欄沒有??吭谌萜骺丶?,該屬性值就是1。Splitter控件引發(fā)兩個(gè)與移動(dòng)相關(guān)的事件Splitter Moving和Spl
27、itter Moved。Splitter Moving在移動(dòng)過程中發(fā)生,Splitter Moved在移動(dòng)過程完成后發(fā)生。它們都接收一個(gè)Splitter Event Args對(duì)象。Splitter EventArgs包含的屬性是Splitter左上角的XY坐標(biāo)(Split X和Split Y)和鼠標(biāo)的XY坐標(biāo)(X和Y)。 Splitter總是與一個(gè)“目標(biāo)”控件相關(guān)聯(lián),Splitter直接改變?cè)摽丶拇笮?,而其他控件也可收到其影響。Splitter通過docking機(jī)制被附加到目標(biāo)控件的。 如果Splitter是垂直的,則Splitter Position屬性表示目標(biāo)控件的寬度,如果Splitt
28、er是水平的,則表示目標(biāo)控件的高度。如果Splitter沒有與控件綁定,該屬性為-1。(3) splitter的靜態(tài)分割技術(shù)一般常用的MFC視窗結(jié)構(gòu)是文檔/視窗結(jié)構(gòu)(document/view architecture)。有很多人說這個(gè)結(jié)構(gòu)浪費(fèi)不少資源,不夠節(jié)約。但我覺得作到界面這一級(jí)浪費(fèi)點(diǎn)資源沒什么太大問題。只要不漏內(nèi)存,不影響效率就已經(jīng)足夠好了。何況這是微軟最推崇的標(biāo)準(zhǔn)界面。文檔/視窗(document/view architecture)結(jié)構(gòu)主要由四個(gè)class組成。document類,view類,framework類和app類。app類是程序的引擎,在MFC中是最不不要關(guān)心的一個(gè)類。f
29、ramwork是窗口的框架,在程序運(yùn)行開始的時(shí)候先生成框架,然后是document class,這里是用來存儲(chǔ)數(shù)據(jù)的。然后是view類,用來顯示數(shù)據(jù)同時(shí)作數(shù)據(jù)交換的。單文檔界面只有一個(gè)document class,但可以又多了view class。至少有一個(gè)view class是active的。可以用GetActiveView()得到它的指針。每個(gè)和document class 關(guān)聯(lián)的view class都有一個(gè)control ID,這個(gè)ID是一個(gè)整數(shù)。如果總共只顯示一個(gè)view class,這個(gè)class的control ID是AFX_IDW_PANE_FIRST,如果同時(shí)顯示好幾個(gè)view
30、 class就需要用分割器(splitter)割開。class 名字叫CSplitterWnd。CSplitterWnd有兩種不同的切割framework的方式。一種叫動(dòng)態(tài)的,用Create()來實(shí)現(xiàn),切的很不理想。沒見過多少class用這種切法。真正應(yīng)用廣泛的是靜態(tài)切割,用CReateStatic實(shí)現(xiàn)。當(dāng)然從名字上就可以看出靜態(tài)切割的缺點(diǎn),就是不能動(dòng)態(tài)重新切分。被分割器隔開的窗口的Control ID可以通過IdFromRowCol(row, col)函數(shù)得到,row和col是窗口的行數(shù)和列數(shù)。其數(shù)值也是在AFX_IDW_PANE_FIRST。也是一個(gè)比較大的數(shù)字。所以隱藏當(dāng)前不想顯示的vi
31、ew時(shí)把他的control ID改成一個(gè)1,2,3之類的很小的數(shù)就可以了。這里只講靜態(tài)窗口的切換,動(dòng)態(tài)的效果不是很好,用戶不想切的時(shí)候也會(huì)自動(dòng)切。而且基于用戶的需要,靜態(tài)窗口的切換更符合人性化設(shè)計(jì)和軟件開發(fā)的需求。1. 在Framework中顯示一個(gè)View。通過菜單或按鈕切換成不同的view。假設(shè)有三種view: CViewA, CViewB,CViewC。用三個(gè)常數(shù)表示他們不顯示時(shí)的control ID。 enum eView ViewA, ViewB, ViewC;在CMainFrame加上下面一個(gè)函數(shù)就可以實(shí)現(xiàn)不同窗口的切換了。很易懂,唯一沒有說的就是CCreateContext co
32、ntext,這是每次Create一個(gè)view時(shí)必須設(shè)定的。其實(shí)也就是m_pCurrentDoc這個(gè)指向當(dāng)前document class的指針需要設(shè)定,其它的取默認(rèn)值就可以了。靜態(tài)窗口的切換的效果就是Window Explorer那樣,左邊的目錄欄,點(diǎn)擊右面就跟著變了。這里需要在已有的CSpllitterWnd的基礎(chǔ)上一點(diǎn)小小的增強(qiáng)。需要一個(gè)切換功能。允許指定任意的子窗口類型。使用靜態(tài)分割窗口的步驟如下:1) 創(chuàng)建CSplitterWnd或者其派生類對(duì)象。2) 調(diào)用CSplitterWnd:CreateStatic創(chuàng)建靜態(tài)分割。3) 調(diào)用CSplitterWnd:CreateView創(chuàng)建各個(gè)子窗
33、口(必須在分割窗口被顯示前調(diào)用)。靜態(tài)窗口的重新切分,時(shí)分時(shí)合。需要知道的是CSplitterWnd在最開始切分窗口CreateStatic的時(shí)候不可以切成一行一列,也就是不切。CreateStatic一定要作真正的切割。 (4) spllitter處理技術(shù)總結(jié)Spllitter處理技術(shù):通過系統(tǒng)框架創(chuàng)建好界面后,要用Splitter控件分割界面。但是這種方式有一定的局限性,雖然通過處理,分割成了多窗口,但是主窗口頁面是WINDOWS系統(tǒng)下的標(biāo)準(zhǔn)界面,不美觀,有時(shí)在一定需要上,該界面不符合需求。2.2.2 主窗口處理技術(shù)(1) 窗口的創(chuàng)建參照2.1.1自定義窗口的創(chuàng)建內(nèi)容。(2) 主窗口技術(shù)描
34、述一般的多窗口處理是在一個(gè)主窗口中,當(dāng)打開第二個(gè)窗口的時(shí)候,或者將第一個(gè)窗口隱藏起來,或者將第一個(gè)窗口銷毀掉。以三維可視化項(xiàng)目為例,如圖2-2所示;簡(jiǎn)單介紹一下一般的多窗口處理。軟件環(huán)境基本的設(shè)計(jì)思想是基于標(biāo)準(zhǔn)的windows窗口標(biāo)簽形式。在主界面的左下方提供主要的三個(gè)標(biāo)簽,通過CMyTabCtrl類負(fù)責(zé)系統(tǒng)的文件預(yù)覽界面、圖像處理和圖像顯示界面的切換功能。各個(gè)標(biāo)準(zhǔn)界面啟動(dòng)后,可以不依據(jù)數(shù)據(jù)的需要隨機(jī)切換和顯示,方便觀察及比較。對(duì)于熟悉windows軟件操作的人員,這樣的軟件界面很容易上手,具有良好的人機(jī)交互能力。不同的標(biāo)簽都是基于一個(gè)標(biāo)準(zhǔn)的后臺(tái)數(shù)據(jù)集。因?yàn)閳D像處理和圖像顯示,主要提供的是觀察
35、和界面上的交互,通常不涉及對(duì)原始數(shù)據(jù)的處理。因此,這三個(gè)標(biāo)簽可以同時(shí)共存。提供這樣的界面,可以方便操作人員在文件管理、圖像處理和圖像顯示三個(gè)標(biāo)簽之間的相互轉(zhuǎn)換,避免了目前流行的PACS軟件上,各種功能模塊相互獨(dú)立,互相排斥,瀏覽困難,無法比對(duì)使用的問題。窗口標(biāo)簽需要根據(jù)項(xiàng)目的實(shí)際需要而設(shè)計(jì),在此項(xiàng)目中,只需要3個(gè)標(biāo)簽之間的相互轉(zhuǎn)換,就可以完成項(xiàng)目需求,方便各個(gè)界面之間的交互處理。在某些實(shí)際工程應(yīng)用中,需要?jiǎng)?chuàng)建多個(gè)標(biāo)簽,這樣創(chuàng)建出來的N多個(gè)窗口之間的交互存在很大的問題,當(dāng)程序運(yùn)行一個(gè)主窗口顯示在我們的視野中,此時(shí)打開第二個(gè)窗口,第一個(gè)窗口會(huì)自動(dòng)隱藏,然后調(diào)出第二個(gè)窗口顯示出來,打開第三個(gè)窗口時(shí),
36、第二個(gè)窗口會(huì)自動(dòng)隱藏,調(diào)出第三個(gè)窗口顯示出來,直到第N多個(gè)窗口。我們把第一個(gè)窗口和第二個(gè)窗口關(guān)聯(lián),創(chuàng)建調(diào)用指針,在調(diào)用指針時(shí),把發(fā)送消息窗口實(shí)現(xiàn)隱藏,當(dāng)有N多個(gè)窗口時(shí),我們創(chuàng)建N多個(gè)指針,以致在調(diào)用窗口時(shí),既能把原窗口隱藏,又能顯出調(diào)用窗口。當(dāng)N多個(gè)窗口之間進(jìn)行切換時(shí),每次只能顯示一個(gè)窗口在視野中,并且窗口的轉(zhuǎn)換不但在顯示的內(nèi)容上有變化,最主要的是后臺(tái)數(shù)據(jù)相互之間的銜接,消息處理都需要配合進(jìn)行,這在數(shù)據(jù)處理起來很復(fù)雜時(shí),非常不方便,不利于高效率工作與使用,造成了一定的麻煩。 圖2-2 主界面窗口(3) 總結(jié)我們能清晰的分析出來,每次只能顯示一個(gè)窗口在視野中,這在數(shù)據(jù)處理時(shí),非常不方便,不利于高
37、效率工作與使用,造成了一定的麻煩。2.2.3 自定義窗口處理技術(shù)隨著計(jì)算機(jī)的更新?lián)Q代,splitter控件、主窗口處理技術(shù)已經(jīng)不能滿足我們對(duì)于計(jì)算機(jī)開發(fā)的需求,也滿足不了用戶的需要了。自定義窗口處理技術(shù)已經(jīng)成為計(jì)算機(jī)窗口處理技術(shù)最嶄新的技術(shù),它以成為現(xiàn)代計(jì)算機(jī)發(fā)展的前提。在高科技騰飛的今天,如今的軟件開發(fā)、界面處理,越來越遵循人性化理念了,用戶不僅直觀上容易接受而且工作簡(jiǎn)便、利于操作。(1) 窗口的創(chuàng)建參照2.1.2自定義窗口的創(chuàng)建內(nèi)容。(2) 過程描述VC中支持Windows操作系統(tǒng)的典型窗口技術(shù),但是一般的多窗口處理技術(shù)和基于VC提供的視圖(窗口)動(dòng)態(tài)分割方法,已經(jīng)不能完全滿足客戶的需求;
38、窗口模式管理復(fù)雜、不易擴(kuò)展、后期處理數(shù)據(jù)不便利,并不是很好的解決方案。這樣一來,為了滿足客戶實(shí)際需求,進(jìn)行自定義窗口處理技術(shù)已經(jīng)在計(jì)算機(jī)窗口處理方面廣泛應(yīng)用,基于對(duì)話框的程序是良好的交互設(shè)計(jì)的首選,通過在同一個(gè)窗口中嵌入CWnd對(duì)象,結(jié)合CView對(duì)象,創(chuàng)建子窗口來實(shí)現(xiàn)多窗口處理,是一個(gè)簡(jiǎn)便、易于控制、相對(duì)獨(dú)立、消息響應(yīng)易于處理的方法,能夠符合人們的思維習(xí)慣,使得用戶容易上手?,F(xiàn)代軟件中,主窗口只有一個(gè),間接通過功能鍵,完成各項(xiàng)操作。主要分為三個(gè)部分:顯示區(qū)(界面區(qū))、主數(shù)據(jù)區(qū)、控制區(qū)(主窗口+消息)。CWnd類是所有窗口類的基類,它允許用戶建立一個(gè)窗口。下面我們就從CWnd類是派生的一個(gè)子類
39、CSplashWnd。我們以CSplashWnd(顯示啟動(dòng)畫面)為例,來看一下它的控制中消息處理過程和主要函數(shù)。編寫窗口類一般先用ClassWizard從CWnd派生出自己的窗口類.我們這里派生出了CSplashWnd類。 重載Create函數(shù),建立一個(gè)窗口。void CSplash:Create(CWnd*parentWnd) BOOL bRet = CWnd:CreateEx(WM_EX_TOPMOST,AfxRegister,WndClass(0),0,WS_POPUP,x,y, Width,Height,parentWnd-GetSafeHwnd(),NULL,NULL); If (b
40、Ret) SetOwner(parentWnd); ShowWindow(SW_SHOW); Create函數(shù)首先調(diào)用CWnd 成員函數(shù)CreateEx登記并建立一個(gè)窗口,其中第一個(gè)參數(shù)表示擴(kuò)展窗口風(fēng)格,WM_EX_TOPMOST 使本窗口位于其他窗口之上.接下來兩個(gè)參數(shù)分別是指WNDCLASS和WindowName的指針。前者是AfxRegisterWndClass (WNDCLASS wc),登記窗口結(jié)構(gòu)后返回的指針,后者則只是一個(gè)字符串指針,WS_POPUP設(shè)定窗口模式為彈出式窗口,x,y設(shè)定了窗口左上角位置,width,height分別指定了窗口的寬度和高度;下一個(gè)參數(shù)是一個(gè)指向父窗口
41、句柄的指針,可用Cwnd類的GetSafeHwnd()函數(shù)返回,最后兩個(gè)參數(shù)用來設(shè)定窗口的菜單和鼠標(biāo),這里并不需要。 ShowWindow(int nCmdShow)函數(shù)可通過參數(shù)nCmdShow顯示;(SW_SHOW)或隱藏(SW_HIDE)一個(gè)窗口。在這種自定義多窗口中,所有子窗口都是用一個(gè)數(shù)據(jù)中心的數(shù)據(jù)。數(shù)據(jù)中心會(huì)在程序啟動(dòng)時(shí)生成一個(gè)全局實(shí)例指針,在程序的運(yùn)行階段,每個(gè)窗口只要獲得這個(gè)全局的數(shù)據(jù)中心指針,然后到數(shù)據(jù)中心去取出自己感興趣的數(shù)據(jù)即可。數(shù)據(jù)都必須由數(shù)據(jù)中心統(tǒng)一控制,即由數(shù)據(jù)中心產(chǎn)生、發(fā)出、保存。算法中心實(shí)際是一個(gè)黑盒子,負(fù)責(zé)將數(shù)據(jù)中心的數(shù)據(jù)拿來處理,最終結(jié)果送還給數(shù)據(jù)中心保存。
42、每個(gè)窗口都不需要知道數(shù)據(jù)中心到底發(fā)生了什么改變,而主需要獲取自己需要使用的數(shù)據(jù)即可。(3) 消息處理窗口創(chuàng)建完成之后,有可能窗口時(shí)間會(huì)相互通信來交換一下窗口更改的信息。在Windows程序中,主要依靠消息來進(jìn)行通信,如果某一個(gè)窗口發(fā)生一些修改,需要其余窗口獲知這一情況,它可以發(fā)送消息給它,當(dāng)其余窗口得到發(fā)送過來的消息時(shí),就會(huì)做出響應(yīng)。但是這個(gè)過程中,窗口之間是不會(huì)直接相互發(fā)送消息,因?yàn)楫?dāng)子窗口數(shù)目很多的時(shí)候,這個(gè)消息過程的控制便變得越來越困難。為了便于控制和管理,這個(gè)發(fā)消息的過程最好是交由父窗口來做,當(dāng)需要向其它窗口發(fā)消息時(shí),可以先把這個(gè)消息告知父窗口,當(dāng)父窗口接收到消息時(shí),再統(tǒng)一將消息發(fā)送至
43、其它窗口。1. 消息的添加接下來我們進(jìn)行一下消息處理與窗口之間控制的行為,有兩種方式:1.自動(dòng)方式:利用Class Wizard實(shí)現(xiàn)自動(dòng)添加2.手動(dòng)方式:手動(dòng)添加消息處理函數(shù)。接下來我們對(duì)這兩種方式進(jìn)行一下說明。 1) 利用Class Wizard實(shí)現(xiàn)自動(dòng)添加 在菜單中選擇View-Class Wizard,也可以用單擊鼠標(biāo)右鍵,選擇Class Wizard,同樣可以激活Class Wizard。選擇Message Map標(biāo)簽,從Class name組合框中選取我們想要添加消息的類。在Object IDs列表框中,選取類的名稱。此時(shí), Messages列表框顯示該類的大多數(shù)(若不是全部的話)可
44、重載成員函數(shù)和窗口消息。類重載顯示在列表的上部,以實(shí)際虛構(gòu)成員函數(shù)的大小寫字母來表示。其他為窗口消息,以大寫字母出現(xiàn),描述了實(shí)際窗口所能響應(yīng)的消息ID。選中我們向添加的消息,單擊Add Function按鈕,Class Wizard自動(dòng)將該消息添加進(jìn)來。有時(shí)候,我們想要添加的消息本應(yīng)該出現(xiàn)在Message列表中,可是就是找不到,我們可以利用Class Wizard上Class Info標(biāo)簽以擴(kuò)展消息列表。在該頁中,找到Message Filter組合框,通過它可以改變首頁中Messages列表框中的選項(xiàng)。這里,我們選擇Window,從而顯示所有的窗口消息,一把情況下,你想要添加的消息就可以在M
45、essage列表框中出現(xiàn)了,如果還沒有,那就接著往下看。 2) 手動(dòng)地添加消息處理函數(shù) 如果在Messages列表框中仍然看不到我們想要的消息,那么該消息可能是被系統(tǒng)忽略掉或者是你自己創(chuàng)建的,在這種情況下,就必須自己手工添加。根據(jù)我們前面所說的消息工作的3個(gè)部件,我們一一進(jìn)行處理: 在類的. h文件中添加處理函數(shù)的聲明,緊接在/AFX_MSG行之后加入聲明,注意:一定要以afx_msg開頭。 例如:#define WM_COUNT_MSG WM_USER+100 例如:afx_msg LRESULT OnCountMsg(WPARAM,LPARAM); 通常,添加處理函數(shù)聲明的最好的地方是源代
46、碼中Class Wizard維護(hù)的表下面,但是在它標(biāo)記其領(lǐng)域的括弧外面。這些括弧中的任何東西都將會(huì)被Class Wizard銷毀。 接著,在用戶類的.cpp文件中找到 /AFX_MSG_MAP行,緊接在它之后加入消息入口項(xiàng)。同樣,也是放在 的外面。例如:BEGIN_MESSAGE_MAP(CMSGDlg, CDialog) ON_WM_PAINT() ON_MESSAGE(WM_COUNT_MSG,&CMSGDlg:OnCountMsg) /AFX_MSG_MAPEND_MESSAGE_MAP() 最后,在該文件中添加消息處理函數(shù)的實(shí)體例如:LRESULT CMSGDlg:OnCountMsg
47、(WPARAM wParam,LPARAM lParam) this-SetDlgItemInt(IDC_EDIT,lParam); return 1;另外還有一個(gè)函數(shù):BOOL PostMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);注意SendMessage直到消息被處理完畢后才返回,而PostMessage是把一條消息投放到創(chuàng)建hWnd窗口的線程的消息隊(duì)列中。函數(shù)不等消息被處理就立即返回。如果開啟了記事本程序,則運(yùn)行以上程序記事本關(guān)閉。另附PeekMessage和GetMessage的區(qū)別:PeekMessage返回
48、TRUE的條件是有消息,如果沒有消息返回FALSE,GetMessage返回TRUE的條件是有消息且該消息不為WM_QUIT,返回FALSE的條件是有消息且該消息為WM_QUIT。在MFC中SendMessage函數(shù)封裝到CWnd類中:CWnd:SendMessageLRESULT SendMessage(UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );返回值:消息處理的結(jié)果;它的值依賴于發(fā)送的消息。2. 消息的處理消息處理函數(shù)又叫窗口過程,在這個(gè)函數(shù)中,不同的消息將用switch語句分配到不同的處理程序中去。Windows的消息處理函
49、數(shù)都有一個(gè)確定的樣式,即這種函數(shù)的參數(shù)個(gè)數(shù)和類型以及其返回值的類型都有明確的規(guī)定。在VC的說明書中,消息處理函數(shù)的原型是這樣定義的:LPESULT CALLBACK WindowProc(HWND hwnd, /接收消息窗口的句柄UINT uMsg, /主消息值WPARAM wParam, /副消息值LPARAM lParam /副消息值);如果程序中還有其它的消息處理函數(shù),也都必須按照上面的方式來定義,函數(shù)名稱可以不唯一的。HelloWin中的WinProc()函數(shù)就是這樣一個(gè)典型的消息處理函數(shù)。消息處理函數(shù)的四個(gè)參數(shù)是由GetMessage()函數(shù)從消息隊(duì)列中獲得MSG結(jié)構(gòu),然后分解后得到
50、的。第二個(gè)參數(shù)uMsg和MSG結(jié)構(gòu)中的message值是一致的,代表了主消息值。程序中用switch語句來將不同類型的消息分配到不同的處理程序中去。WinProc()函數(shù)明確的處理了4個(gè)消息,分別是WM_KEYDOWN(擊鍵消息)、WM_RBUTTONDOWN(鼠標(biāo)右鍵按下消息)、WM_PAINT(窗口重畫消息)、WM_DESTROY(銷毀窗口消息)。值得注意的是,應(yīng)用程序發(fā)送到窗口的消息遠(yuǎn)遠(yuǎn)不止以上這幾條,像WM_SIZE、WM_MINIMIZE、WM_CREATE、WM_MOVE等這樣頻頻使用的消息就有幾十條。為了減輕編程的負(fù)擔(dān),Windows的API提供了DefWindowProc()函
51、數(shù)來處理這些最常用的消息,調(diào)用了這個(gè)函數(shù)后,這些消息將按照系統(tǒng)默認(rèn)的方式得到處理。第3章 VC+多窗口處理界面3.1 多窗口界面基本思想表面上,多窗口界面是為了顯示和與用戶之間的交互。事實(shí)上,多窗口設(shè)計(jì)在程序設(shè)計(jì)過程中,往往是數(shù)據(jù)結(jié)構(gòu)、處理過程、交互、控制的多種因素共同作用的結(jié)果。多窗口界面的典型特征是:后臺(tái)具備一組或者多組數(shù)據(jù)結(jié)構(gòu);前臺(tái)具有多個(gè)獨(dú)立的窗口,每一個(gè)窗口具有自己獨(dú)立的消息系統(tǒng);軟件系統(tǒng)整體具備一個(gè)統(tǒng)一個(gè)控制系統(tǒng),用于協(xié)調(diào)所有的消息的窗口過程。程序設(shè)計(jì)中,如果界面能夠通過一個(gè)單一窗口解決問題,則盡量不用多窗口進(jìn)行處理。多窗口處理時(shí),首先考慮是否數(shù)據(jù)真的需要同時(shí)顯示及處理,例如CAD
52、設(shè)計(jì)軟件中,由于計(jì)算機(jī)屏幕為二維平面,只能夠表達(dá)三維空間中物體的一個(gè)觀察角度,因此如果需要處理三維數(shù)據(jù)的話,則必須要進(jìn)行至少三個(gè)觀察角度的互動(dòng)處理,因此必須使用多窗口處理;其次,考慮交互的便利性。例如在一個(gè)窗口中,我們需要同時(shí)顯示多個(gè)元素或者多幅圖片,一般情況下,只是顯示,不需要消息響應(yīng)和交互,則需要一個(gè)消息循環(huán)即可,則不需要多窗口處理。但是,如果每一個(gè)元素都需要自己獨(dú)立的消息響應(yīng),則必須使用多窗口處理。這個(gè)時(shí)候則需要詳細(xì)設(shè)計(jì)綜合控制部分的功能。多窗口處理中,與其他軟件開發(fā)一樣,都需要設(shè)計(jì)到軟件的控制部分、數(shù)據(jù)部分、多窗口的交互部分。 圖3-1 數(shù)據(jù)處理界面軟件的控制部分。多窗口中的各個(gè)子窗口
53、的主要功能是用來實(shí)現(xiàn)軟件的子功能。因此,其功能劃分可以劃分為主要功能的子功能模塊調(diào)用中,在代碼上類似于函數(shù)調(diào)用,只不過其具備消息和界面交互能力。因此,子窗口需要主窗口統(tǒng)一創(chuàng)建、使用、調(diào)配、銷毀。如圖所示,每一個(gè)子窗口都擁有一個(gè)自身的窗口句柄,子窗口的功能調(diào)用就是通過窗口句柄來實(shí)現(xiàn)的。因此,在主窗口中需要保留每一個(gè)子窗口的句柄,當(dāng)需要某一個(gè)子窗口執(zhí)行調(diào)用的時(shí)候,通過窗口句柄即可以實(shí)現(xiàn)。軟件的總體功能,例如菜單、控件、外部調(diào)用、內(nèi)部消息等,都需要通過主窗口的控制模塊統(tǒng)一調(diào)配。 圖3-2 說明圖數(shù)據(jù)部分。VC中常用的一個(gè)窗口框架是SDI(單文檔框架),該框架提供了一個(gè)非常好的數(shù)據(jù)部分的管理機(jī)制。對(duì)于
54、窗口而言,其主要的功能是向用戶顯示數(shù)據(jù)部分的數(shù)據(jù)內(nèi)容,可以通過直接數(shù)據(jù)顯示、圖表、圖像、圖形等方式;同時(shí),用戶也會(huì)根據(jù)數(shù)據(jù)的內(nèi)容,對(duì)數(shù)據(jù)進(jìn)行操作,操作的過程則是窗口接受用戶的輸入,并通過預(yù)定義輸入的語義,實(shí)現(xiàn)將用戶的意愿轉(zhuǎn)化為數(shù)據(jù)處理的動(dòng)作的形式。所以,在數(shù)據(jù)部分,除需要保存具體的數(shù)據(jù)以外,還需要定義眾多的數(shù)據(jù)處理函數(shù),供窗口調(diào)用。需要處理的數(shù)據(jù),應(yīng)該盡量存放在一個(gè)數(shù)據(jù)類對(duì)象中,如果需要多種數(shù)據(jù)并行處理,則一定要注意數(shù)據(jù)之間的調(diào)配,避免數(shù)據(jù)沖突。多窗口的架構(gòu)。VC中提供的多窗口處理能力是使用Splitter分割功能,對(duì)窗口進(jìn)行拆分,然后給每一個(gè)窗口分配一個(gè)視類,作為交互處理的客戶區(qū)。在簡(jiǎn)單的窗
55、口過程中,這種方式建立的多窗口可以滿足大部分的需要。但是在復(fù)雜的程序處理過程中,這種方式就有一些力不從心了。需要大家注意的是,在多窗口處理中,其基本原理就是先創(chuàng)建子窗口(Splitter分割),然后創(chuàng)建子窗口中的視。如圖所示: 圖3-3 主界面實(shí)際上,一個(gè)窗口處理過程就是:子窗口+子視圖這樣的一個(gè)結(jié)構(gòu)。這種結(jié)構(gòu)是VC功能劃分規(guī)則所要求的。子窗口用于管理邊框和窗口的位置;子視圖則用于管理與用戶之間的交互。理論上,在窗口中可以創(chuàng)建無限多個(gè)子窗口結(jié)構(gòu)。但是,過多的窗口管理 Splitter是無能為力的,所以在本輪文中,我們采用對(duì)話框?yàn)橹鞔翱诮缑?,在其中嵌入需要的子窗口,每一個(gè)子窗口都包括兩個(gè)部分:C
56、Wnd窗口對(duì)象和CView視圖對(duì)象。程序?qū)崿F(xiàn)的基本過程:1、設(shè)定CRect對(duì)象,用于存儲(chǔ)子窗口的大小和位置。如果需要在程序中動(dòng)態(tài)地修改子窗口的位置和大小,則可以修改其對(duì)應(yīng)的CRect對(duì)象,然后重新定義窗口。2、在主窗口類中創(chuàng)建子窗口的指針,并在構(gòu)造函數(shù)中將其初始化。然后再OnInitDialog()函數(shù)中使用Create函數(shù)創(chuàng)建子窗口。同時(shí)在子窗口對(duì)象中,創(chuàng)建對(duì)應(yīng)的子視圖。注意保留窗口對(duì)象的指針,便于控制訪問。3、將數(shù)據(jù)類對(duì)象的指針傳遞給子窗口,任何對(duì)于窗口上的交互,都以修改數(shù)據(jù)對(duì)象中的對(duì)應(yīng)數(shù)據(jù)值作為指示和標(biāo)準(zhǔn)。4、所有的控制指令,均由自定義的子窗口消息函數(shù)來負(fù)責(zé)執(zhí)行。3.2 處理結(jié)果 圖3-
57、2 處理結(jié)果 3.3 討論多窗口設(shè)計(jì)注意的問題:1、遵照人們讀信息的習(xí)慣設(shè)計(jì)窗口;2、考慮到信息現(xiàn)實(shí)位置對(duì)對(duì)用戶的情緒影響;3、窗口上應(yīng)留有充分的空白;4、窗口布局應(yīng)整齊、平衡;5、窗口布局應(yīng)恒定。第4章 多窗口處理技術(shù)的展望在八十年代中期,美國麻省理工學(xué)院(MIT)與DEC、IBM等計(jì)算機(jī)大廠商聯(lián)合組織了一個(gè)“雅典娜工程”,共同開發(fā)成一種可運(yùn)行本地應(yīng)用程序,又可以調(diào)用遠(yuǎn)程資源的窗口系統(tǒng)。八十年代末期隨著X窗口第十一版本的問世,越來越多的計(jì)算機(jī)廠商將它作為自己操作系統(tǒng)的標(biāo)準(zhǔn)配置,當(dāng)時(shí)的X窗口系統(tǒng)有兩點(diǎn):一是網(wǎng)絡(luò)透明。在CPU上運(yùn)行的程序可以通過本CPU或另一個(gè)CPU的顯示器來顯示圖形,一個(gè)X應(yīng)用程序可以同時(shí)將結(jié)果顯示在不同的工作站上。二是開發(fā)商與模型獨(dú)立。X窗口系統(tǒng)是一個(gè)標(biāo)準(zhǔn)的應(yīng)用執(zhí)行環(huán)境。為一臺(tái)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年粵人版七年級(jí)歷史下冊(cè)階段測(cè)試試卷
- 2024年華東師大版六年級(jí)語文下冊(cè)階段測(cè)試試卷
- 2024年蘇教新版四年級(jí)語文下冊(cè)階段測(cè)試試卷
- 高鐵新城二手房交易合同樣本
- 茶葉店鑰匙管理規(guī)則
- 道路橋梁加固合同
- 市場(chǎng)研究文件管理:洞察市場(chǎng)趨勢(shì)
- 酒店管理項(xiàng)目財(cái)務(wù)管理辦法
- 2024年粵教版八年級(jí)數(shù)學(xué)上冊(cè)月考試卷
- 證券公司防疫承諾書
- 2024年中國航空油料集團(tuán)有限公司校園招聘考試試題必考題
- 知識(shí)圖譜智慧樹知到期末考試答案章節(jié)答案2024年浙江大學(xué)
- 《灰塵的旅行》導(dǎo)讀
- 高血壓患者不遵醫(yī)飲食行為的原因分析及對(duì)策
- 60周歲以上的老年人換領(lǐng)C1駕照三力測(cè)試題答案
- 社區(qū)依法執(zhí)業(yè)培訓(xùn)課件
- ISO50001能源管理體系管理評(píng)審報(bào)告OK
- 輸送機(jī)械安全培訓(xùn)
- 人教版六年級(jí)上冊(cè)計(jì)算題專項(xiàng)練習(xí)1000題及答案
- 農(nóng)村文化建設(shè)培訓(xùn)
- 教育理念和教育方法
評(píng)論
0/150
提交評(píng)論