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