習(xí)題2 - 吉林大學(xué)繼續(xù)教育學(xué)院(網(wǎng)絡(luò)教育學(xué)院 培訓(xùn)學(xué)院)、在線看_第1頁
習(xí)題2 - 吉林大學(xué)繼續(xù)教育學(xué)院(網(wǎng)絡(luò)教育學(xué)院 培訓(xùn)學(xué)院)、在線看_第2頁
習(xí)題2 - 吉林大學(xué)繼續(xù)教育學(xué)院(網(wǎng)絡(luò)教育學(xué)院 培訓(xùn)學(xué)院)、在線看_第3頁
習(xí)題2 - 吉林大學(xué)繼續(xù)教育學(xué)院(網(wǎng)絡(luò)教育學(xué)院 培訓(xùn)學(xué)院)、在線看_第4頁
習(xí)題2 - 吉林大學(xué)繼續(xù)教育學(xué)院(網(wǎng)絡(luò)教育學(xué)院 培訓(xùn)學(xué)院)、在線看_第5頁
已閱讀5頁,還剩38頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

吉林大學(xué)遠(yuǎn)程教育課件Windows

A

P

I編

程主講人:

翟慧杰學(xué)

時:48習(xí)題2八、子窗體控件:圖形界面和消息處理是任何一個基于Windows的應(yīng)用程序必須認(rèn)真考慮的事情。在前面的章節(jié)中已經(jīng)介紹了Windows應(yīng)用程序消息處理的機(jī)制,這種機(jī)制對于所有對象的消息處理都是一致的,即實行客戶(用戶操作或請求)到操作系統(tǒng)(捕獲消息)到應(yīng)用程序(接收消息并執(zhí)行處理代碼)的機(jī)制。而圖形界面則包含豐富的內(nèi)容,主要是指各種各樣的控件,不僅包括前面章節(jié)中介紹的主窗口,還包括按鈕、編輯框、滾動條等具有窗口風(fēng)格的子窗口。豐富的圖形界面元素為建立界面友好的應(yīng)用程序提供了可能,而完整的消息處理機(jī)制則為應(yīng)用程序的功能提供了高效集成的保證。子窗口的概念包含兩方面的含義:從創(chuàng)建子窗口的過程來看,

Createwindow函數(shù)為創(chuàng)建各類窗口提供了統(tǒng)一的函數(shù),并且子窗口的類型唯一由第一個參數(shù)確定;從窗口的界面風(fēng)格來看,這些子窗口都擁有窗口的許多性質(zhì)。設(shè)計含有子窗口的程序都從調(diào)用函數(shù)CreateWindow開始,它一共有11個參數(shù),指定待創(chuàng)建的子窗口的類型、標(biāo)題、風(fēng)格等非常重要的性質(zhì)。CreateWindow函數(shù)的原型定義如下:HWND

CreateWindow(LPCTSTR

lpClassName,//指定子窗口的類名LPCTSTR

lPWindowName,//指定窗口名稱DWORD

dwSty1e,

//指定窗口風(fēng)格int

x,int

y,//指定窗口左上角頂點的水平坐標(biāo)//指定窗口左上角頂點的垂直坐標(biāo)int

nWidth,//指定窗口寬度int

nHeight,//指定窗口高度HWND

hWndParent,//父窗口句柄,允許為NULLHMENU

hMenu,//窗口的菜單句柄或者是子窗口自己的標(biāo)識符HANDLE

hInstance,//應(yīng)用程序句柄,可以為NULLLPVOID

lpParam //指向lParam數(shù)值的指針);當(dāng)子窗口創(chuàng)建成功后,返回子窗口的句柄,

否則返回NULL。在11個參數(shù)中l(wèi)pClassName、

dwStyle和hMenu是三個最重要的參數(shù)。下面分別講述它們的意義。lpClassName指定子窗口的類名,它們的取值可以是如表所示的值。子窗口類型描述dwStyle指定子窗口的風(fēng)格。這里只講述一般窗口的風(fēng)格,表所列的子窗口的風(fēng)格在后面內(nèi)容中分別講述。一般窗口的風(fēng)格取值如表所示。參數(shù)hMenu指定菜單句柄或者子窗口的標(biāo)識符。例如,已建立的菜單資源標(biāo)識符為IDM_MENU,窗口需要加載該菜單,則

hMenu參數(shù)可為IDM_NENU子窗口的標(biāo)識符可以是字符或者數(shù)

字,但同一個應(yīng)用程序中不同子窗口的標(biāo)識符必須相異,并且前面加上(hMENU)來滿足參數(shù)類型兼容的要求。應(yīng)用程序運行后,首先創(chuàng)建主窗口,并發(fā)送WM_CREATE消息,由于在該消息的處理代碼中含有創(chuàng)建子窗口的代碼,于是就創(chuàng)建了子窗口。當(dāng)子窗口的WS_VISIBLE風(fēng)格指定后,子窗口就顯示出來。同前所講的消息處理機(jī)制類似,子窗口的

消息也主要依靠參數(shù)lParam和wParam來完成。應(yīng)用程序創(chuàng)建子窗口后,在主窗口的消息處理函數(shù)中一般使用

SendMessase向子窗口發(fā)送消息。當(dāng)用戶對子窗口進(jìn)行某種操作后,將向父窗口發(fā)送WM_COMMAND類型的通知消息。其中,

lParam包含子窗口的句柄;wParam參數(shù)的高位字節(jié)為通知代碼,低位子代表子窗口的標(biāo)識符。下面將分別講述各種子窗口的特有風(fēng)格以及消息循環(huán),并結(jié)合實例介紹子窗口的應(yīng)用。一、Button子窗口Button(按鈕)是Windows子窗口的最

常用的元素之一。例如安裝程序中選擇Next或者Back按鈕。1.按鈕類型依據(jù)操作的類型可以把按鈕分為按鍵按鈕、單選按鈕、復(fù)選按鈕,另外還有存放單選按鈕和復(fù)選按鈕的按鈕組合框(GroupBox)。按鍵按鈕一般執(zhí)行某項功能,例如彈出新的窗口。在創(chuàng)建子窗口的函數(shù)中,如果需要創(chuàng)建按鍵按鈕,則dwStyle參數(shù)指定為

BS_PUSHBUTTON。當(dāng)某些選擇相互排斥時,需要用到單選按鈕,例如字體或者顏色。單選按鈕的左端為一個圓圈,選中單選按鈕,則顯示實心,相反為空心圓。在同一個按鈕組合框里的眾多單選按鈕中,用戶只能選擇一個。如果需要單選按鈕,則dwStyle參數(shù)必須指定為BS_RADIOBUTTON。當(dāng)某些選擇可以相互并存時,需要用到復(fù)選按鈕。復(fù)選按鈕的風(fēng)格與單選按鈕類似,左端為圓圈或者小空心正方形。在同一個按鈕組合框里的復(fù)選按鈕可以同時被選中幾個。如果需要創(chuàng)建,則dwStyle參數(shù)設(shè)置為BS_CHECKBOX。在復(fù)選按鈕中還有一類特殊的按鈕,即三態(tài)按鈕。顧名思義,三態(tài)按鈕允許有三種狀態(tài):選中(Selected)、本選中(

Unselected)、顯灰(Grayed)。三態(tài)按鈕在需要把單選按鈕和復(fù)選按鈕放在同一個組合框里時才有應(yīng)用的價值,若要創(chuàng)建三態(tài)

按鈕,則把dwStyle參數(shù)設(shè)置為BS_3STATE。按鈕的風(fēng)格取值如表所示。按鈕有自己特殊的消息類型。當(dāng)用戶選擇了按鈕時,它將向父窗口發(fā)送WM_COMMAND消息,這些通知消息包含在wParam的高位字節(jié)中。按鈕的通知代碼如表所示。二、編輯框編輯框的主要作用是讓用戶輸入文本,例如要求用戶在編輯框中輸入密碼的文本。1.基礎(chǔ)知識編輯框里的文本可以是單行,也可以是多行,后者的風(fēng)格取值為

ES_MULTILINE。一般對于多行文本編輯框還需設(shè)置

ES_AUTOVSCROLL,這樣用戶可以輸入多行文本,并自動滾動。在默認(rèn)的狀況下,編輯框是沒有邊框的,如果需要邊框,設(shè)置WS_BORDER即可。另外還可規(guī)定編輯框里的文本是否只讀,風(fēng)格屬性設(shè)置為ES_READONLY。當(dāng)需要建立密碼編輯框時,只要設(shè)置ES_PASSWORD風(fēng)格屬性即可。編輯框的全部風(fēng)格如表所示。Windows系統(tǒng)把編輯框的操作以

WM_COMMAND的形式發(fā)送給父窗口消息的有關(guān)信息仍然包含在參數(shù)wParam和IParam中。wParam的低位字節(jié)包含編輯框的標(biāo)識符,高位字節(jié)包含通知消息的類型,lParam包含編輯框的句柄。編輯框的通知消息如表所示。編輯框的通知消息類型在默認(rèn)的情況下,當(dāng)用戶用鼠標(biāo)右擊后自動彈出菜單,形式如圖所示。編輯框的彈出式菜列表框:列表框允許用戶從多個對象中選擇一項或多項,這些對象可以是文本、文件和位圖等。當(dāng)列表框的項不能全部顯示出來時,可以用滾動條來滾動顯示。1基礎(chǔ)知識默認(rèn)的列表框只允許用戶單選,需要多選時,須把列表框的風(fēng)格定義為LBS_

MULTIPLESEL和LBS_EXTENDEDSEL。列表框提供的其他風(fēng)格取值可以控制列表框的外觀和操作。例如是否按照列表框各項的名稱排序,是否多行排列,是否有滾動條等。當(dāng)用戶對列表框進(jìn)行了操作時,就會向主窗口發(fā)送一條消息。列表框的消息類型比較簡單,主要是單擊、雙擊和選擇等。同

編輯框一樣,列表框也會遇到內(nèi)存不夠的問題,所以消息類型

中含有這一項。消息總是通過WM_COMMAND的形式發(fā)送給主窗口的。其中,wParam的低位字節(jié)表示列表框的標(biāo)識符,高位字節(jié)表示消息的類型,lParam表示主窗口句柄。列表框的消息類型如表所示。列表框也是通過調(diào)用函數(shù)CreateWindow來創(chuàng)建的,第一參數(shù)設(shè)置為ListBox即可。風(fēng)格取值可以取表所示的值。在主窗口里的消息一般是在WM_

COMMAND里處理表中以LBN開頭的消息。下面以一個具體的例子介紹列表框的常見操作。組合框:組合框兼具編輯框和列表框的功能,既能編輯選項,又能顯示多個項。在Windows程序設(shè)計中可以見到大量組合框的應(yīng)用實例,例如文件對話框里的目錄搜索組合框。基礎(chǔ)知識:組合框的風(fēng)格主要有三種,分別是簡單組合框(Simple ComboBox)、下拉式組合框(DropDown

ComboBox)和下拉式列表框(

DropDown

ListBox)。下拉式列表框和下拉式組合框平時只顯示編輯區(qū)域,只在打開時才顯示組合框的各項,這樣有利于節(jié)省屏幕空間。這三種組合框的基本功能如表所示。滾動條:滾動條既可以是許多子窗口(如編輯框、列表框)的附件,又可以獨立成為子窗口。滾動條的主要用途在于對某個在一定范圍內(nèi)變化的屬性值或者變量進(jìn)行動態(tài)設(shè)置。例如用滾動條可以方便地控制顏色的深淺,設(shè)置線條的寬度;滾動條也用來顯示某個任務(wù)的進(jìn)度,這樣滾動條又被稱為進(jìn)度條。滾動條有一些重要的函數(shù)和方法,下面分別介紹。用來設(shè)置滾動條類型和活動狀態(tài)的函數(shù)是EnableScrollBar,其原型定義如下:BOOL

EnableScrollBar(HWND

hwnd//指向父窗口或者滾動條的句柄UINT

wSBflags,//標(biāo)志滾動條的類型UINT

wArrows//滾動條的滾動按鈕設(shè)置);wSBflag用來設(shè)置滾動條的類型,可以取表所示的任意值。顯示或隱藏滾動條的函數(shù)是ShowScrollBar,其原型定義如下:BOOL

ShowScrollBar(HWND

hwnd,//指向父窗日的句柄int

wBar,//滾動條活動狀態(tài)的標(biāo)志BOOL

bShow//滾動條是否可見,當(dāng)為TRUE時可見,相反則隱藏);九、對話框:在Miscrosoft

Windows中,對話框就是應(yīng)用程序創(chuàng)建的用于獲取用戶輸入的一個臨時窗口。應(yīng)用程序一般用對話框來提示用戶輸入命令的附加信息。對話框通常都含有一個或多個用戶可以輸入文本、選擇可選擇項或者指導(dǎo)命令操作的控件。Windows提供了許多函數(shù)、消息和預(yù)定義的控件,用于幫助創(chuàng)建和管理對話框。這樣,開發(fā)應(yīng)用程序用戶接口就變得更容易了。Windows還提供了許多支持諸如File

Open和File

Print等命令的預(yù)定義對話框(也稱為“公共”對話框)。不管執(zhí)行命令

的是什么類型的應(yīng)用程序,使用這些命令的應(yīng)用程序都可以用

公共對話框來提示同樣的用戶輸入。當(dāng)用戶在另一個窗口中工

作時,許多應(yīng)用程序也用對話框顯示信息選項。例如,字處理

應(yīng)用程序經(jīng)常在文本搜索命令中使用一個對話框。應(yīng)用程序在

搜索文本期間,該對話框?qū)⒈4嬖谄聊簧?。用戶可以返回到?/p>

對話框中,并再次搜索同樣的字符串、或者改變該對話框中的

輸入、搜索一個新的字符串。以這種方式使用對話框的應(yīng)用程

序,在該應(yīng)用程序運行期間或在用戶明確地關(guān)閉對話框之前,

一般都將創(chuàng)建并保持顯示一個對話框。為了支持應(yīng)用程序以不同的方法使用對話框,Windows提供了兩種類型的對話框:模式對話框和無模式對話框。模式對話框在允許應(yīng)用程序繼續(xù)運行之前,要求用戶必須提供信息或取消該對話框,應(yīng)用程序把模式對話框與不輸入附加信息就不能繼續(xù)執(zhí)行的命令一起使用;無模式對話框允許用戶提供信息并返回前一任務(wù),但不關(guān)閉該對話框。由于模式對話框通過調(diào)用單個函數(shù)就可以創(chuàng)建、執(zhí)行它們的任務(wù),所以比無模式對話框更容易管理。

不管是創(chuàng)建一個模式對話框還是無模式對話框,應(yīng)用程序都必須提供一個對話框模板來描述對話框的樣式和內(nèi)容,并提供一個對話框過程來完成任務(wù)。對話框模板就是對話框及其所含控件的一個二進(jìn)制描述。開發(fā)人員可以創(chuàng)建這個模板,把它做為從可執(zhí)行文件中裝入的一個資源,對話框過程就是一個應(yīng)用程序自定義的回調(diào)函數(shù)。盡管對話框過程與窗口過程是相似的,但它們各自所負(fù)的責(zé)任是不同的。應(yīng)用程序一般可以用DialogBox或CreateDialog函數(shù)創(chuàng)建對話框。DialogBox用于創(chuàng)建模式對話框;CreateDialog函數(shù)用于創(chuàng)建一個無模式對話框。這兩個函數(shù)將從應(yīng)用程序的可執(zhí)行文件中裝入對話框模板,并創(chuàng)建一個與該模板對應(yīng)的規(guī)格相符的彈出式窗日。還有其他一些函數(shù)可以用內(nèi)存中的模板創(chuàng)建對話框,并在對話框創(chuàng)建完后把附加信息傳遞給對話框過程。對話框通常都屬于一個預(yù)定義的專有窗口類。不管是模式對話框還是無模式對話框,Windows都使用這個窗口類及與其對應(yīng)的窗口過程。調(diào)用這個過程時,它將先創(chuàng)建對話框的窗口,以及該對話框中所有控件的窗口,然后再給對話框過程發(fā)送消息。在對話框可見期間,預(yù)定義的窗口過程將管理所有消息,處理一些消息,并把其他消息傳給對話框父窗日的消息處理函數(shù)。應(yīng)用程序不能直接訪問預(yù)定義窗口類或窗口過程,但是它們可以用對話框模板和對話框過程修改對話框的樣式和特性。無模式對話框:無模式對話框應(yīng)該是一個彈出式窗口,其中包含有系統(tǒng)菜單、標(biāo)題欄和邊界,也就是說,對話框模板應(yīng)該指定WS_

POPUP、WS_

CAPTION、WS_

BORDER和WS_

SYSMENU等風(fēng)格。Windows不會自動顯示該對話框,只有在指定該模板的風(fēng)格為WS_VISIBLE時才會自動顯示。應(yīng)用程序用CreateDialog或CreateDialogIndirect函數(shù)創(chuàng)建無模話框。其中函數(shù)CreateDialog的原型定義如下:無模式對話框既不能使父窗口無效,也不給它發(fā)送消息。在創(chuàng)建對話框時,Windows將使其成為活動窗口,但用戶或應(yīng)用程序任何時候都可以改變活動窗口。如果該對話框變成了非活動的,應(yīng)用程序?qū)⒇?fù)責(zé)為對話框檢取和分發(fā)輸入消息。大多數(shù)應(yīng)用程序都是使用這消息循環(huán)來完成這一項工作的。但是,為了允許用戶用鍵盤移動到控件上并選取控件,應(yīng)用程序必須調(diào)用IsDialogMessage函數(shù),該函數(shù)的原型定義如下:無模式對話框不像模式對話框那樣給應(yīng)用程序返回一個值,但是對話框過程可以用SendMessage函數(shù)給父窗口發(fā)送消息。應(yīng)用程序在結(jié)束前必須銷毀所有的無模式對話框。這可以通過調(diào)用Destroywindow函數(shù)銷毀一個無模式對話框。在大多數(shù)情況下,單擊Cancel按鈕時,程序調(diào)用DestroyWindow函數(shù),如果用戶不以這種方式關(guān)閉對話框,則應(yīng)用程序必須在其他地方調(diào)用

DestroyWindow函數(shù)。函數(shù)DestroyWindow將使對話框的窗口句柄變?yōu)闊o效,從而使得對使用這個句柄的函數(shù)的任何后續(xù)調(diào)用都返回錯誤值。為了防止出現(xiàn)錯誤,對話框過程應(yīng)該通知其父窗口,說明該對話框已經(jīng)被銷毀。許多應(yīng)用程序都需要維護(hù)一個含有該對話框句柄的全局變量,當(dāng)對話框過程銷毀對話框時,它將把該全局變量設(shè)置成NULL,說明該對話框已經(jīng)不再存在了。無模式對話框的對話框過程不能調(diào)用EndDialog函數(shù)來銷毀它。三、模式對話框模式對話框也是一個彈出式窗口,應(yīng)用程序通過DialogBox函數(shù)和DialogBoxIndirect函數(shù)可以創(chuàng)建模式對話框。DialogBox函的原型定義如下:在創(chuàng)建模式對話框時,Windows將使其成為活動窗口。該對話框?qū)⒁恢北3譃榛顒訝顟B(tài),直到對話框過程調(diào)用了EndDialog函數(shù),或Windows激活了另一個應(yīng)用程序中的一個窗口。在模式對話框銷毀之前,用戶或應(yīng)用程序都不能使其父窗口成為活動窗口。當(dāng)應(yīng)用程序創(chuàng)建模式對話框時,如果其父窗口還不是無效的,則Windows將自動使該窗口和屬于該窗口的所有子窗口都變成無效。在該對話框銷毀之前,其父窗口將一直保持無效。盡管對話框過程任何時候都有能力使父窗口變成有效的,但是使父窗口有效就達(dá)不到使用模式對話框的目的,因此不建議這樣做。 當(dāng)Windows創(chuàng)建模式對話框時,它將給當(dāng)前捕獲鼠標(biāo)輸入的窗口發(fā)送WM

CANCELMODE消息。接收這條消息的應(yīng)用程序應(yīng)該釋放鼠標(biāo),以便用戶可以在模式對話框中使用鼠標(biāo)。由于Windows將使父窗口無效,所以,在接收到這條消息時,如果父窗口不能釋放鼠標(biāo),則所有的鼠標(biāo)輸入都將丟失。為了處理模式對話框的消息,Windows將啟動自己的消息循環(huán),臨時接管對整個應(yīng)用程序消息隊列的控制。如果Windows檢取到一條明顯不是用于對話框的消息,則把消息分發(fā)給正確的窗口。如果它檢取到一條WM_QUIT消息,則它將該消息投遞回應(yīng)用程序的消息隊列,使得應(yīng)用程序的主消息循環(huán)最終能夠檢取到該消息。只要應(yīng)用程序的消息隊列為空,Windows就把WM_CANCELDLE消息發(fā)送給父窗口,應(yīng)用程序可以利用這條消息,在對話框仍然占據(jù)屏幕期間,完成一項后臺任務(wù)。如果應(yīng)用程序以這種方式使用消息,則它必須頻繁交出控制權(quán),使模式對話框可以接收用戶輸入。應(yīng)用程序可以在創(chuàng)建該對話框時通過指定DS_NOIDLEMSG風(fēng)格,禁止模式對話框發(fā)送WM_ENTEAIDLE。公共對話框使Windows應(yīng)用程序的設(shè)計變得更為簡單。公共對話框是應(yīng)用程序通過調(diào)用某個函數(shù)而不是通過提供對話框過程和包含對話框模板的資源文件來創(chuàng)建對話框。在動態(tài)鏈接庫COMMDLG.DLL中定義了各種公共對話框的過程和模板。每個默認(rèn)對話框過程處理公共對話框和它控制的消息,默認(rèn)對話框模板定義公共對話框的外觀和它的控制。

由于公共對話框提供執(zhí)行某些操作的一組標(biāo)準(zhǔn)控件,因此它們除了簡化Windows應(yīng)用程序的開發(fā)外,也對用戶有幫助。當(dāng)Windows開發(fā)者在它們的應(yīng)用程序中使用公共對話框后,用戶會發(fā)現(xiàn)一旦在一個應(yīng)用程序中掌握了公共對話框,就能在其他的應(yīng)用程序中很輕易地執(zhí)行同樣的操作。在Windows中定義的各種公共對話框如表所示。Open和Save

As對話框: Open對話框和Save

AS對話框的外形類似,每個對話框都包含能使用戶指定文件或一級文件位置和名字的控件。在Open對話框中,用戶選擇要打開的文件。在Save

As對話框中,用戶選取要保存的文件。Open對話框如圖所示。Save

As對話框如圖所示。Font對話框:Font對話框允許用戶選擇字體、字體風(fēng)格、點陣大小以及字體效果的控件。Font對話框如圖所示。Find和Replace對話框:

Find和Replace對話框外形相似。Find對話框用于給

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論