《实用VC编程之玩转控件》第1课:Windows编程简介
本文轉(zhuǎn)載自:
VC驛站
https://www.cctry.com/thread-297374-1-1.html
0、開(kāi)發(fā)環(huán)境:
操作系統(tǒng):Microsoft Windows 7 Ultimate Sp1 x64
編譯工具:Microsoft Visual Studio 2013 Professional 中文版(其實(shí) VS2010、VS2012、VS2013、VS2015、VS2017 都可以的,操作基本相同)
1、簡(jiǎn)介:
之前VC驛站給大家推出了《實(shí)用C++》的新手入門(mén)教程,可以說(shuō)把我們平時(shí)針對(duì)C++語(yǔ)言經(jīng)常用到的知識(shí)點(diǎn)都做了講解。不知道大家學(xué)習(xí)的怎么樣?課后有沒(méi)有真正的去敲代碼練習(xí)。光看教程是不行的哦~
那么之前啊主要給大家講解的是C++的基礎(chǔ)語(yǔ)言,所以呢主要是在黑窗口的這種命令行控制臺(tái)下操作的,跟界面沒(méi)什么關(guān)聯(lián)。但是作為C++新手來(lái)說(shuō)肯定都是對(duì)于UI界面比較感興趣,畢竟我也是從新手階段過(guò)來(lái)的。寫(xiě)好了的軟件執(zhí)行起來(lái)能看到界面也很有成就感。可以激發(fā)大家學(xué)習(xí)VC++編程的積極性。所以從本節(jié)課開(kāi)始給大家講解下VC++中的界面開(kāi)發(fā)技術(shù)。
2、Windows程序簡(jiǎn)介:
實(shí)際上Windows系統(tǒng)大家應(yīng)該再熟悉不過(guò)了,Windows程序呢也主要分那么幾種,例如:exe的可執(zhí)行程序,dll的動(dòng)態(tài)鏈接庫(kù)程序,lib的靜態(tài)庫(kù)程序,sys的驅(qū)動(dòng)類(lèi)型程序等等。這些都可以用VC++來(lái)開(kāi)發(fā)。
Exe類(lèi)的程序從操作界面的使用角度來(lái)說(shuō)又分成兩種:
第一種就是我們之前一直使用的黑窗口的控制臺(tái)下的程序,這種程序一般沒(méi)有什么界面,都是使用命令行進(jìn)行操作,比如:ipconfig、ping 之類(lèi)的。使用系統(tǒng)提供的cmd控制臺(tái)進(jìn)行加載。入口點(diǎn)函數(shù)是 main。
第二種就是我們接下來(lái)要講解的非控制臺(tái)類(lèi)型的程序,這種程序可以有界面,也可以沒(méi)有界面。想要界面就調(diào)用創(chuàng)建窗口的API函數(shù)去創(chuàng)建個(gè)界面出來(lái),不想要界面呢不創(chuàng)建就可以了。所以呢比較靈活。入口點(diǎn)函數(shù)是 WinMain。
3、Windows編程開(kāi)發(fā)相關(guān)概念:
Windows API:Windows操作系統(tǒng)應(yīng)用程序接口(Windows API),有非正式的簡(jiǎn)稱(chēng)法為WinAPI,是微軟對(duì)于Windows操作系統(tǒng)中可用的核心應(yīng)用程序編程接口的稱(chēng)法。它被設(shè)計(jì)為各種語(yǔ)言的程序調(diào)用,也是應(yīng)用軟件與Windows系統(tǒng)最直接的交互方式。大多數(shù)驅(qū)動(dòng)程序需要對(duì)Windows系統(tǒng)更底層次訪問(wèn)接口,由所用版本的Windows的Native API來(lái)提供接口。
Windows有一個(gè)軟件開(kāi)發(fā)包(SDK, software development kit)提供相應(yīng)的文檔和工具,以使程序員開(kāi)發(fā)使用Windows API的軟件和利用Windows技術(shù)。
說(shuō)了這么多,對(duì)于新手來(lái)說(shuō)可能還是不太理解,我用通俗一點(diǎn)的話來(lái)解釋下!
有人會(huì)問(wèn)了我都學(xué)完了C++,難道還不能編寫(xiě)Windows系統(tǒng)下的應(yīng)用程序嗎?我還得學(xué)其他的東西嗎?答案是:能,但是只能編寫(xiě)一些簡(jiǎn)單的控制臺(tái)下的黑窗口程序。或者說(shuō)只能調(diào)用C++基本語(yǔ)言內(nèi)部的函數(shù)。
如果你要?jiǎng)?chuàng)建一個(gè)窗口,如果你要?jiǎng)?chuàng)建一個(gè)按鈕,如果你要?jiǎng)?chuàng)建一個(gè)菜單,如果你要?jiǎng)?chuàng)建一個(gè)進(jìn)程,如果你要做一個(gè)帶界面的任務(wù)管理器,以上這些單純使用C++語(yǔ)言能做到嗎?答案是:肯定做不到了。
那么如何來(lái)做呢,就是要調(diào)用windows系統(tǒng)提供給我們的API接口,大家可以把API接口看作是系統(tǒng)提供給我們的工具,使用這些工具就可以做出我們想要的東西來(lái)。再舉個(gè)現(xiàn)實(shí)生活中的例子,你學(xué)會(huì)了C++語(yǔ)言就好比你有了一些簡(jiǎn)單的工具,C++語(yǔ)言就好比是螺絲刀,扳手,鉗子等等,用這些工具你可以做些簡(jiǎn)單的事情,可如果要讓你造出一臺(tái)汽車(chē),你單純使用螺絲刀、扳手一類(lèi)的工具可能造出來(lái)嗎?答案是:不可能。所以你還需要制造汽車(chē)的更高級(jí)的東西,比如:車(chē)床、工廠、車(chē)間等等大型的機(jī)械化設(shè)備,這些設(shè)備是制造汽車(chē)的必須品,API就好比這些設(shè)備。所以你要在windows系統(tǒng)上開(kāi)發(fā)出更高級(jí)的軟件,那么就必須調(diào)用其系統(tǒng)提供的API接口。這么打比方大家明白了嗎?
4、基本的Win32程序:
接下來(lái)就教大家如何創(chuàng)建一個(gè)Win32類(lèi)型的Exe程序,具體見(jiàn)視頻教程演示。。。
怎么樣大家看到了吧,代碼量不少,而且操作來(lái)說(shuō)比較復(fù)雜,又是初始化,又是注冊(cè)窗口類(lèi),又是窗口函數(shù)什么的,一堆東西。更重要的是我們使用這個(gè)模版工程繼續(xù)開(kāi)發(fā)的話會(huì)越來(lái)越麻煩,比如添加個(gè)基本的按鈕響應(yīng)函數(shù),這個(gè)還算是簡(jiǎn)單的了,當(dāng)對(duì)一些比較復(fù)雜的控件操作時(shí)就更復(fù)雜了,比如:ListCtrl 高級(jí)列表控件,TreeCtrl 樹(shù)形控件等等。
另外,當(dāng)前工程模版默認(rèn)創(chuàng)建出來(lái)的這個(gè)窗口不是對(duì)話框,所以是沒(méi)辦法進(jìn)行拖拽控件的,對(duì)于小白來(lái)說(shuō)想快速的拖拽控件做出一個(gè)窗口看來(lái)是有點(diǎn)麻煩了。
實(shí)際上Win32類(lèi)型的工程就是調(diào)用基本的系統(tǒng)提供的API函數(shù)來(lái)寫(xiě)程序的。
5、解決方案:
既然Win32類(lèi)型的工程這么麻煩,要記的東西也這么多,以后開(kāi)發(fā)起來(lái)豈不是很費(fèi)事兒?這個(gè)微軟早想到了,其他很多公司也想到了。本身C++就是一門(mén)面相對(duì)象的,可封裝的語(yǔ)言,所以能不能對(duì)系統(tǒng)提供的API函數(shù)以及復(fù)雜的開(kāi)發(fā)流程進(jìn)行一下封裝呢,這樣我們以后使用起來(lái)就能方便不少?答案是:當(dāng)然可以了。所以現(xiàn)在市面上有很多封裝好的C++庫(kù),或者說(shuō)框架,比如:MFC、QT,這兩個(gè)算是比較有名的,而且他們兩個(gè)不僅僅是界面庫(kù),還包括很多其他的操作,比如文件管理,字符串操作,網(wǎng)絡(luò)管理,多線程,數(shù)據(jù)庫(kù)操作,注冊(cè)表操作等等吧,很多方面。
那么他們兩個(gè)有什么區(qū)別,我們?cè)撨x用哪個(gè)呢?其實(shí)這個(gè)話題從古至今很多人在討論。個(gè)人觀點(diǎn),感覺(jué)兩個(gè)框架都有優(yōu)缺點(diǎn),大家根據(jù)自己的需要進(jìn)行選擇:
MFC:微軟基礎(chǔ)類(lèi)庫(kù)(英語(yǔ):Microsoft Foundation Classes,簡(jiǎn)稱(chēng)MFC)是一個(gè)微軟公司提供的類(lèi)庫(kù)(class libraries),以C++類(lèi)的形式封裝了Windows API,并且包含一個(gè)(也是微軟產(chǎn)品的唯一一個(gè))應(yīng)用程序框架,以減少應(yīng)用程序開(kāi)發(fā)人員的工作量。其中包含的類(lèi)包含大量Windows句柄封裝類(lèi)和很多Windows的內(nèi)建控件和組件的封裝類(lèi)。
優(yōu)點(diǎn):MFC說(shuō)白了就是微軟自家的東西,所以VC自帶MFC工程向?qū)?#xff0c;VC對(duì)MFC支持的也很好。對(duì)于界面方面實(shí)現(xiàn)起來(lái)簡(jiǎn)單,易于上手,能快速的制作簡(jiǎn)單的UI界面,執(zhí)行效率高,生成的EXE或者其他程序可以直接在Windows系統(tǒng)上執(zhí)行,生成的文件體積也比較小;
缺點(diǎn):這東西對(duì)于新手來(lái)說(shuō)學(xué)起來(lái)還是有點(diǎn)復(fù)雜,因?yàn)槭菍?duì)WinApi的封裝,里面用到了大量的宏,所以有時(shí)候是基于面向過(guò)程的,有時(shí)候是基于面向?qū)ο蟮?#xff0c;內(nèi)部也是使用基于Windows系統(tǒng)的消息機(jī)制,所以學(xué)起來(lái)不是那么容易,學(xué)習(xí)周期長(zhǎng)。如果要做成比較美觀的界面,類(lèi)似我們使用的QQ、迅雷、YY等軟件的UI界面的話,使用MFC實(shí)現(xiàn)起來(lái)就比較費(fèi)時(shí)費(fèi)力,做起來(lái)比較麻煩倒不是說(shuō)做不了,只是比較費(fèi)勁而已。另外,因?yàn)槭俏④涀约旱臇|西,所以不能跨平臺(tái),在 Linux、Mac 系統(tǒng)上是別想用了。
總結(jié):所以MFC適合開(kāi)發(fā)對(duì)界面美化要求不高軟件。
Qt:是一個(gè)跨平臺(tái)的C++應(yīng)用程序開(kāi)發(fā)框架。廣泛用于開(kāi)發(fā)GUI程序,這種情況下又被稱(chēng)為部件工具箱。也可用于開(kāi)發(fā)非GUI程序,比如控制臺(tái)工具和服務(wù)器。Qt使用于OPIE、Skype、VLC media player、Adobe Photoshop Elements、VirtualBox與Mathematica以及被Autodesk、歐洲空間局、夢(mèng)工廠、Google、HP、KDE、盧卡斯影業(yè)、西門(mén)子公司、沃爾沃集團(tuán), 華特迪士尼動(dòng)畫(huà)制作公司、三星集團(tuán)、飛利浦、Panasonic所使用。
它是Digia公司的產(chǎn)品。Qt使用標(biāo)準(zhǔn)的C++和特殊的代碼生成擴(kuò)展(稱(chēng)為元對(duì)象編譯器(Meta Object Compiler, moc))以及一些宏。通過(guò)語(yǔ)言綁定,其他的編程語(yǔ)言也可以使用Qt。
Qt是自由且開(kāi)放源代碼的軟件,在GNU寬通用公共許可證(LGPL)條款下發(fā)布。所有版本都支持廣泛的編譯器,包括GCC的C++編譯器和Visual Studio。
優(yōu)點(diǎn):Qt是一個(gè)開(kāi)源的項(xiàng)目,可以跨平臺(tái)使用,在 Linux、Mac 系統(tǒng)下一樣可以使用。使用完全面向?qū)ο蟮姆庋b機(jī)制,內(nèi)部使用信號(hào)與槽機(jī)制,易于上手。開(kāi)發(fā)文檔豐富,支持VS插件的形式進(jìn)行開(kāi)發(fā)。可以制作漂亮精美的軟件UI界面。省時(shí)省力。
缺點(diǎn):Qt有點(diǎn)過(guò)度封裝,而且體積也稍大,執(zhí)行效率沒(méi)有MFC高,程序分發(fā)打包的時(shí)候需要將Qt的核心DLL一起隨程序打包,不然程序跑步起來(lái)。當(dāng)然也可以用靜態(tài)庫(kù)的方式編譯,默認(rèn)只生成一個(gè)Exe文件,但這樣的話程序的體積會(huì)變的很大,不管怎么說(shuō)Qt生成的文件在分發(fā)攜帶方面的方便性上趕不上Windows的原生程序或者M(jìn)FC的程序。當(dāng)然如果是類(lèi)似YY這種產(chǎn)品級(jí)的軟件倒也無(wú)所謂多帶幾個(gè)DLL了。
總結(jié):所以Qt適合開(kāi)發(fā)對(duì)界面美化要求較高的軟件。
MFC 和 QT 就好比 手動(dòng)檔車(chē)與自動(dòng)檔車(chē)一樣,前者開(kāi)發(fā)軟件太累,但可控性更加高些。
綜合以上吧,畢竟我們不是開(kāi)發(fā)什么大型的軟件產(chǎn)品,但也為了讓大家以后轉(zhuǎn)型方便,所以本套教程界面UI方面使用MFC來(lái)開(kāi)發(fā),除界面外的其他邏輯部分我們?nèi)?原生CPP + SDK API 的方式來(lái)做。
這種方式目前來(lái)說(shuō)我想是最好的。同時(shí)呢,大家不要著急,以后我們VC驛站會(huì)給大家出幾套Qt方面的教程,讓想學(xué)Qt方面的學(xué)員也有機(jī)會(huì)!
從下節(jié)課開(kāi)始,我們就逐一講解MFC控件工具箱中提供的基礎(chǔ)的那15個(gè)控件,以及每個(gè)控件如何進(jìn)行美化,如何使用開(kāi)源類(lèi)進(jìn)行更多功能的操作等等,大家好好學(xué)習(xí)吧~
6、相關(guān)控件:
Button? ? ? ? ? ? ? ? 按鈕控件
CheckBox? ? ? ? 復(fù)選框控件
Edit? ? ? ? ? ? ? ? ? ? ? ? 編輯框控件
ComboBox? ? ? ? 下拉控件
ListBox? ? ? ? ? ? ? ? 列表控件
GroupBox? ? ? ? 分組控件
Radio Button? ? ? ? 單選框控件
Static Text? ? ? ? 靜態(tài)文本框控件
Picture Control? ? ? ? 圖像控件
Slider Control? ? ? ? 滑塊控件
Spin Control? ? ? ? 數(shù)值調(diào)節(jié)鈕控件
Progress Control? ? ? ? 進(jìn)度條控件
List Control? ? ? ? 高級(jí)列表控件
Tree Control? ? ? ? 樹(shù)形控件
Tab Control? ? ? ? 標(biāo)簽控件
7、本套課程力求:
如何通過(guò)百度、谷歌搜索引擎找技術(shù)資料,當(dāng)場(chǎng)演示;
如何查看并翻譯Msdn,找到對(duì)我們有用的資料;
當(dāng)場(chǎng)一行一行敲代碼,發(fā)現(xiàn)問(wèn)題并解決問(wèn)題;
當(dāng)場(chǎng)調(diào)試代碼,如何解決問(wèn)題的,GetLastError 的使用等等;
主要還是一些動(dòng)手的細(xì)節(jié)吧,多在課堂上演示;
多用C++本身的東西,或者 C++和 SDK Api 的東西,方便大家以后轉(zhuǎn)型。
第1課免費(fèi)試看,下載地址:
https://www.cctry.com/thread-297374-1-1.html
總結(jié)
以上是生活随笔為你收集整理的《实用VC编程之玩转控件》第1课:Windows编程简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 学习笔记--EMI是什么?
- 下一篇: ALSA子系统(七)------simp