免费中文字幕在线_视频精品一区二区三区_日本在线观看视频_久久久久久亚洲精品视频_99热在线看_91精品福利

mfc是什么(mfc和qt)

  • 生活
  • 2023-04-26 12:10

在編程語(yǔ)言中,函數(shù)是一個(gè)很重要的概念,其身影無(wú)處不在。在面向過(guò)程的編程方式中,函數(shù)更是程序的基本構(gòu)建模塊,在面向?qū)ο蟮木幊谭绞街校瘮?shù)演變?yōu)轭惢驅(qū)ο蟮某蓡T(當(dāng)然也可以使用與類無(wú)關(guān)的函數(shù))。

函數(shù)由函數(shù)頭和函數(shù)體組成。函數(shù)頭包括域?qū)傩裕ㄈ鏴xternal、static或類域)、返回值類型、函數(shù)名、及參數(shù)。域?qū)傩园ㄆ湓诙辔募幊讨械目梢?jiàn)范圍,是否是屬于某一個(gè)類的成員?返回值類型是指函數(shù)返回的值的具體數(shù)據(jù)類型(可以理解為函數(shù)輸出的一部分)。函數(shù)名是函數(shù)保存在內(nèi)存代碼區(qū)的首地址,用于函數(shù)的調(diào)用及函數(shù)指針的右值。參數(shù)可以理解為函數(shù)的輸入、輸出(如果是引用或指針作為參數(shù),可以理解為是一個(gè)種輸出,因?yàn)槠洳僮骰蚋碌臄?shù)據(jù)是引用或指針的地址值所指向的內(nèi)存單元)。在CC++中,函數(shù)***于{}中,函數(shù)體是函數(shù)功能的具體實(shí)現(xiàn)。

如果用一臺(tái)手機(jī)來(lái)理解函數(shù)概念,手機(jī)***在外的操作界面就像是函數(shù)頭,外殼內(nèi)的組件就像是函數(shù)體中,外殼就像是{}。

函數(shù)的開(kāi)發(fā)者和使用者可以站在不同的角度去理解函數(shù)的構(gòu)造,函數(shù)的開(kāi)發(fā)者需要負(fù)責(zé)函數(shù)頭作為界面(interface)的友好性及穩(wěn)定性,以及保證實(shí)現(xiàn)(implement)函數(shù)功能的函數(shù)體的空間和時(shí)間效率。而函數(shù)的使用者可以不關(guān)心函數(shù)功能的具體實(shí)現(xiàn)(當(dāng)然了解其具體實(shí)現(xiàn)能更好地加深對(duì)函數(shù)的理解),也就是不心關(guān)心函數(shù)體的具體內(nèi)容,只需關(guān)心函數(shù)使用的具體細(xì)節(jié),也就是函數(shù)體的內(nèi)容。

就如同一臺(tái)手機(jī),手機(jī)開(kāi)發(fā)者要負(fù)責(zé)手機(jī)從外部操作到內(nèi)部零部件的全部,而手機(jī)購(gòu)買者(使用者)則只需關(guān)心怎樣使用即可。

一個(gè)數(shù)據(jù)集D,以及操作這個(gè)數(shù)據(jù)集D的代碼集C如何更好地形成一個(gè)整體,在函數(shù)的概念中有一定的體現(xiàn),也就是通過(guò)參數(shù)和局部變量形成數(shù)據(jù)集D,以及在函數(shù)體中包含一個(gè)函數(shù)指針,由其指向的函數(shù)代表代碼集C。但這種封裝性還是體現(xiàn)得不夠充分。如果把數(shù)據(jù)集D,以及操作這個(gè)數(shù)據(jù)集D的代碼集C全部歸屬(或限定)到某一個(gè)類別,并設(shè)定訪問(wèn)控制(accessmodifier)的概念,這種封裝性就能得到最充分的體現(xiàn),這種思想就是面向?qū)ο蟮念愵愋透拍睢TL問(wèn)控制就像一個(gè)手機(jī)外殼,用public修飾的類(對(duì)象)的屬性(數(shù)據(jù)集D)或***(代碼集C)就是一個(gè)類(對(duì)象)提供的界面(interface),是公共的,公開(kāi)的,***在外的,使用者密切關(guān)注的;而private修飾的類(對(duì)象)的屬性(數(shù)據(jù)集D)或***(代碼集C)就是一個(gè)類(對(duì)象)提供的具體實(shí)現(xiàn),是私密的,隱藏在內(nèi)的,使用者可以不加以密切注意的。

于是,一些編程大牛對(duì)于一些使用頻率很高的功能便開(kāi)發(fā)出界面友好穩(wěn)定、實(shí)現(xiàn)效率高的函數(shù)和類,保存在庫(kù)(library)中,也就是函數(shù)庫(kù)或類庫(kù),實(shí)現(xiàn)共享。一些優(yōu)秀函數(shù)庫(kù)或類庫(kù)也就成了編程語(yǔ)言的有機(jī)組成部分。

一種計(jì)算機(jī)語(yǔ)言的應(yīng)用程序是運(yùn)行在某一操作系統(tǒng)之上的,某一操作系統(tǒng)對(duì)某一語(yǔ)言的支持是通過(guò)其某一語(yǔ)言的函數(shù)庫(kù)或類庫(kù)來(lái)實(shí)現(xiàn)的。

1控件臺(tái)程序

控制臺(tái)程序程序只關(guān)心數(shù)據(jù),不在乎界面,在一個(gè)簡(jiǎn)單的Shell中執(zhí)行。

控制臺(tái)程序用字符進(jìn)行交互,不需要鼠標(biāo)操作,也就是沒(méi)有圖形界面,也就是不需要使用控件做為輸入、輸出的媒介。

而windowapi與MFC主要使用控件(視窗)做為交互媒介,也就有了資源對(duì)象(不是類類型對(duì)象)的概念,同時(shí)也有了事件消息和消息響應(yīng)函數(shù)的概念(MessageBased,EventDriven)。

2WindowsAPI編程

當(dāng)Windows操作系統(tǒng)開(kāi)始占據(jù)主導(dǎo)地位的時(shí)候,開(kāi)發(fā)Windows平臺(tái)下的應(yīng)用程序成為人們的需要。而在Windows程序設(shè)計(jì)領(lǐng)域處于發(fā)展的初期,Windows程序員所能使用的編程工具唯有API(ApplicationProgrammingInterface)函數(shù),這些函數(shù)是Windows提供給應(yīng)用程序與操作系統(tǒng)的接口,他們猶如“積木塊”一樣,可以搭建出各種界面豐富,功能靈活的應(yīng)用程序。所以可以認(rèn)為API函數(shù)是構(gòu)筑整個(gè)Windows框架的基石,在它的下面是Windows的操作系統(tǒng)核心,而它的上面則是所有的華麗的Windows應(yīng)用程序。

WindowsAPI所提供的功能可以歸為七類:

2.1基礎(chǔ)服務(wù)(BaseServices),提供對(duì)Windows系統(tǒng)可用的基礎(chǔ)資源的訪問(wèn)接口。比如像:文件系統(tǒng)(filesystem)、外部設(shè)備(device)、進(jìn)程(process)、線程(thread)以及訪問(wèn)注冊(cè)表(Windowsregistry)和錯(cuò)誤處理機(jī)制(errorhandling)。這些功能接口位于Windows下的kernel32.dll和advapi32.dll中。

2.2圖形設(shè)備接口(GDI),提供功能為:輸出圖形內(nèi)容到顯示器、打印機(jī)以及其他外部輸出設(shè)備。位于Windows下的gdi32.dll。

2.3圖形化用戶界面(GUI),提供的功能有創(chuàng)建和管理屏幕和大多數(shù)基本控件(control),比如按鈕和滾動(dòng)條,接收鼠標(biāo)和鍵盤輸入,以及其他與GUI有關(guān)的功能。這些調(diào)用接口位于Windows下的user32.dll。從WindowsXP版本之后,基本控件和通用對(duì)話框控件(CommonControlLibrary)的調(diào)用接口放在comctl32.dll中。

2.4通用對(duì)話框鏈接庫(kù)(CommonDialogBoxLibrary),為應(yīng)用程序提供標(biāo)準(zhǔn)對(duì)話框,比如打開(kāi)/保存文檔對(duì)話框、顏色對(duì)話框和字體對(duì)話框等等。這個(gè)鏈接庫(kù)位于Windows下comdlg32.dll中。它被歸類為UserInterfaceAPI之下。

2.5通用控件鏈接庫(kù)(CommonControlLibrary),為應(yīng)用程序提供接口來(lái)訪問(wèn)操作系統(tǒng)提供的一些高級(jí)控件。比如狀態(tài)欄(statusbar)、進(jìn)度條(progressbars)、工具欄(toolbar)和標(biāo)簽(tab)等。這個(gè)鏈接庫(kù)位于Windows下comctl32.dll中。它被歸類為UserInterfaceAPI之下。

2.6Windows外殼(WindowsShell),作為WindowsAPI的組成部分,不僅允許應(yīng)用程序訪問(wèn)Windows外殼提供的功能,還對(duì)之有所改進(jìn)和增強(qiáng)。它位于Windows下的shell32.dll中(Windows95則在shlwapi.dll中)。它被歸類為UserInterfaceAPI之下。

2.7網(wǎng)絡(luò)服務(wù)(NetworkServices),為訪問(wèn)操作系統(tǒng)提供的多種網(wǎng)絡(luò)功能提供接口。它包括NetBIOS、Winsock、NetDDE及RPC等。

3從API到可視化編程

程序員想編寫具有Windows風(fēng)格的軟件,必須借助API,API也因此被賦予至高無(wú)上的地位。但是,如若沒(méi)有合適的Windows編程平臺(tái),那么Windows開(kāi)發(fā)是一項(xiàng)很復(fù)雜的工作。在可視化編程IDE出來(lái)之前,那時(shí)的Windows程序開(kāi)發(fā)還是比較復(fù)雜的工作,程序員必須熟記一大堆常用的API函數(shù),而且還得對(duì)Windows操作系統(tǒng)有深入的了解。然而隨著軟件技術(shù)的不斷發(fā)展,在Windows平臺(tái)上出現(xiàn)了很多優(yōu)秀的可視化編程環(huán)境,程序員可以采用“所見(jiàn)即所得”的編程方式來(lái)開(kāi)發(fā)具有精美用戶界面和功能強(qiáng)大的應(yīng)用程序。

這些優(yōu)秀可視化編程環(huán)境操作簡(jiǎn)單、界面友好(諸如VB、VC++、DELPHI等),在這些工具中提供了大量的類庫(kù)和各種控件,它們替代了API的神秘功能,事實(shí)上這些類庫(kù)和控件都是構(gòu)架在WIN32API函數(shù)基礎(chǔ)之上的,是封裝了的API函數(shù)的***。它們把常用的API函數(shù)的組合在一起成為一個(gè)控件或類庫(kù),并賦予其方便的使用***,所以極大的加速了Windows應(yīng)用程序開(kāi)發(fā)的過(guò)程。有了這些控件和類庫(kù),程序員便可以把主要精力放在程序整體功能的設(shè)計(jì)上,而不必過(guò)于關(guān)注技術(shù)細(xì)節(jié)。

4API編程適應(yīng)場(chǎng)合

實(shí)際上如果我們要開(kāi)發(fā)出更靈活、更實(shí)用、更具效率的應(yīng)用程序,必然要涉及到直接使用API函數(shù),雖然類庫(kù)和控件使應(yīng)用程序的開(kāi)發(fā)簡(jiǎn)單的多,但它們只提供Windows的一般功能,對(duì)于比較復(fù)雜和特殊的功能來(lái)說(shuō),使用類庫(kù)和控件是非常難以實(shí)現(xiàn)的,這時(shí)就需要采用API函數(shù)來(lái)實(shí)現(xiàn)。

這也是API函數(shù)使用的場(chǎng)合,所以我們對(duì)待API函數(shù)不必刻意去研究每一個(gè)函數(shù)的用法,那也是不現(xiàn)實(shí)的(能用得到的API函數(shù)有幾千個(gè)呢)。正如某位大蝦所說(shuō):API不要去學(xué),在需要的時(shí)候去查API幫助就足夠了。但是,許多API函數(shù)令人難以理解,易于誤用,還會(huì)導(dǎo)致出錯(cuò),這一切都阻礙了它的推廣。

5從API到MFC

數(shù)以千計(jì)的WindowsAPIs,每個(gè)看起來(lái)都好象比重相若(至少你從手冊(cè)上看不出來(lái)孰輕孰重)。有些APIs彼此雖有群組關(guān)系,卻沒(méi)有相近或組織化的函數(shù)名稱。星羅棋布,霧列星馳;又似雪球一般愈滾愈多,愈滾愈大。撰寫Windows應(yīng)用程序需要大量的耐力與毅力,以及大量的小心謹(jǐn)慎!

MFC幫助我們把這些浩繁的APIs,利用對(duì)象導(dǎo)向的原理,邏輯地組織起來(lái),使它們具備抽象化、封裝化、繼承性、多態(tài)性、模塊化的性質(zhì)。

1989年微軟公司成立ApplicationFramework技術(shù)團(tuán)隊(duì),名為AFX小組,用以開(kāi)發(fā)C++對(duì)象導(dǎo)向工具給Windows應(yīng)用程序開(kāi)發(fā)人員使用。AFX的"X"其實(shí)沒(méi)有什么意義,只是為了湊成一個(gè)響亮好念的名字。

這個(gè)小組最初的「***」,根據(jù)記載,是要"utilizethelatestinobjectorientedtechnologytoprovidetoolsandlibrariesfordeveloperswritingthemostadvancedGUIapplicationsonthemarket",其中并未畫地自限與Windows操作系統(tǒng)有關(guān)。果然,其第一個(gè)原型產(chǎn)品,有自己的窗口系統(tǒng)、自己的繪圖系統(tǒng)、自己的對(duì)象數(shù)據(jù)庫(kù)、乃至于自己的內(nèi)存管理系統(tǒng)。當(dāng)小組成員以此產(chǎn)品開(kāi)發(fā)應(yīng)用程序,他們發(fā)現(xiàn)實(shí)在是太復(fù)雜,又悖離公司的主流系統(tǒng)--Windows--太遙遠(yuǎn)。于是他們修改***變成"deliverthepowerofobject-orientedsolutionstoprogrammerstoenablethemtobuildworld-classWindowsbasedapplicationsinC++."這差不多正是Windows3.0異軍崛起的時(shí)候。

C++是一個(gè)復(fù)雜的語(yǔ)言,AFX小組預(yù)期MFC的使用者不可能人人皆為C++專家,所以他們并沒(méi)有采用所有的C++高階性質(zhì)(例如多重繼承)。許多「麻煩」但「幾乎一成不變」的Windows程序動(dòng)作都被隱藏在MFC類別之中,例如WinMain、RegisterClass、WindowProcedure等等等。

為了讓MFC盡可能地小,盡可能地快,AFX小組不得不舍棄高度的抽象(導(dǎo)至過(guò)多的虛擬函數(shù)),而引進(jìn)他們自己發(fā)明的機(jī)制,嘗試在對(duì)象導(dǎo)向領(lǐng)域中解決Windows消息的處理問(wèn)題。這也就是MessageMapping和Messagerouting機(jī)制。注意,他們并沒(méi)有改變C++語(yǔ)言本身,也沒(méi)有擴(kuò)大語(yǔ)言的功能。他們只是設(shè)計(jì)了一些令人拍案叫絕的宏,而這些宏背后隱藏著巨大的機(jī)制。

微軟公司于1992/04推出C/C++7.0產(chǎn)品時(shí)初次向世人介紹了MFC1.0,這個(gè)初試啼聲的產(chǎn)品包含了20,000行C++源代碼,60個(gè)以上的Windows相關(guān)類別,以及其它的一般類別如時(shí)間、數(shù)據(jù)處理、文件、內(nèi)存、診斷、字符串等等等。它所提供的,其實(shí)是一個(gè)"thinandefficientC++transformationoftheWindowsAPI"。其32位版亦在1992/07隨著Win32SDK推出。

MFC實(shí)現(xiàn)了控件的可視化,其applicationWizard和classwizard可以實(shí)現(xiàn)程序和代碼模塊框架的自動(dòng)化實(shí)現(xiàn)。

開(kāi)發(fā)需要讀寫文件的應(yīng)用程序并且有簡(jiǎn)單的輸入和輸出可以利用單文檔視結(jié)構(gòu)。

開(kāi)發(fā)注重交互的簡(jiǎn)單應(yīng)用程序可以使用對(duì)話框?yàn)榛A(chǔ)的窗口,如果文件讀寫簡(jiǎn)單這可利用CFile進(jìn)行。

在要求在多個(gè)文檔間傳遞數(shù)據(jù)時(shí)使用多文檔視結(jié)構(gòu)。

6圖形界面程序中的資源

資源在WindowsAPI中使用一種特殊的結(jié)構(gòu)體指針,句柄來(lái)引用。

WindowsAPI開(kāi)發(fā)之初C++還沒(méi)有出現(xiàn),所以windows提供的API函數(shù)使用的封裝數(shù)據(jù)類型是結(jié)構(gòu)體(不是類)。隨著C++的誕生與普及,WindowsAPI+C++就誕生了MFC,且資源控件開(kāi)發(fā)實(shí)現(xiàn)了可視化,而封裝數(shù)據(jù)類型也用類類型來(lái)實(shí)現(xiàn)。

常用的資源:ICON、CURSOR、BITMAP、FONT、DIALOG、MENU、ACCELERATOR、STRING、VERSIONINFO、TOOLBAR。

7圖形界面程序中的事件與消息

WindowsAPI是編程者自己把消息和響應(yīng)函數(shù)聯(lián)系在一起。mfc是編程者采用微軟為我們做好了MESSAGE-MAP機(jī)制,來(lái)處理消息。

8函數(shù)庫(kù)和類庫(kù)

WindowsAPI和MFC都使用.lib文件。

.lib分兩種,一種是.lib文件里面包含了cpp編譯出來(lái)的代碼,鏈接的時(shí)候把需要的代碼拷貝到exe里面,mfc,、crt在選擇靜態(tài)的時(shí)候使用這種方式。

另外一種是.lib中不包含代碼,只是描述該到哪個(gè)dll里面怎么找對(duì)應(yīng)的代碼.這種編譯出來(lái)的exe就需要dll一起才能運(yùn)行。mfc、crt使用共享庫(kù)的時(shí)候,以及WindowsAPI就是使用的這種方式。

API的dll在windows系統(tǒng)的system32目錄下,圖形界面相關(guān)的API在USER32.dll里,進(jìn)程、文件之類的操作在kernel32.dll里。MSDN的每個(gè)函數(shù)都會(huì)說(shuō)明它在哪個(gè)頭文件,哪個(gè)lib,哪個(gè)dll里的。

9C、C++控制臺(tái)程序、WindowsAPI程序、MFC程序比較

C++并不是純種的對(duì)象導(dǎo)向語(yǔ)言(SmallTalk和Java才是)。所以,MFC之中得以存在有不屬于任何類別的全域函數(shù),它們統(tǒng)統(tǒng)在函數(shù)名稱開(kāi)頭冠以Afx。

SDK程序只要包含WINDOWS.H就好,所有API的函數(shù)聲明、消息定義、常數(shù)定義、宏定義、都在WINDOWS.H檔中。除非程序另調(diào)用了操作系統(tǒng)提供的新模塊(如CommDlg、ToolHelp、DDEML...),才需要再各別包含對(duì)應(yīng)的.H檔。

關(guān)于類的繼承性在MFC的控件類中有最充分的體現(xiàn),在MFC中,各種控件類的框架都已搭建好,其中包含了最通用的屬性和***以及一些虛函數(shù),開(kāi)發(fā)者可以重寫虛函數(shù)或派生控件類來(lái)實(shí)現(xiàn)自己的功能或個(gè)性化的需求。

-End-

猜你喜歡

主站蜘蛛池模板: 天天干夜操 | 久久久国产一区 | 国产免费av网站 | 日韩特级 | 91视视频在线观看入口直接观看 | 久久久精选 | 九九热欧美| 国产精品久久嫩一区二区 免费 | 亚洲首页| 久久久网 | 久久精品亚洲精品 | 亚洲人人| 在线成人免费视频 | 人妖天堂狠狠ts人妖天堂狠狠 | 国产黄色大片网站 | 天天操天天碰 | 国产一区91 | 午夜免费小视频 | 欧美一级在线 | 国产女人和拘做受在线视频 | 1000部精品久久久久久久久 | 自拍偷拍第一页 | 中文字幕亚洲精品 | 国产精品一二三区 | 日本成人片网站 | 欧美日韩成人在线 | 国产欧美一区二区精品性色 | 日韩中文一区 | 久久中文字幕一区 | 午夜影院免费体验区 | 成人免费一区二区三区视频网站 | 最新天堂中文在线 | 日韩成人短视频 | 狠狠操精品视频 | 国产精品久久久久久久7电影 | 色综合天天综合网国产成人网 | 亚洲免费一区 | www.男人天堂 | 伊人久久艹 | 免费网站看v片在线a | 夜夜撸av|