廣東東軟學院 高群霞
淺談Windows程序設計
廣東東軟學院高群霞
Windows編程是開發Windows軟件、一些桌面應用及游戲的堅實基礎,其以友好的圖形用戶界面和多任務特點備受程序員熱愛。文章概述了Windows程序設計的特點和運行機制,介紹了Windows程序開發的兩種主流方法——Win32 API應用程序和MFC應用程序的框架和實現方法,論述了兩種方法的特點和應用范圍。
Windows編程;Win32;API接口;MFC框架
Windows編程是開發Windows軟件、一些桌面應用及游戲的基礎,相比傳統的Dos系統,Windows系統以圖形化界面和多線程等優點備受軟件開發者們熱愛。
本文先闡述了Windows程序設計的一些概念,介紹了Windows程序的運行機制和實現方法,然后介紹了Win32 API(Application Programming Interface)編程方法和MFC(Microsoft Foundation Classes)編程方法,最后并比較了兩種Windows編程方法的特點和應用范圍。
Windows編程是一種基于圖形用戶界面的多任務、多線程編程技術,其實現主要有兩種方法:傳統的Win32 API應用程序方法和交互式的MFC應用程序設計方法[1]。
Windows程序是基于消息的事件驅動程序,重點是編寫事件和消息的處理程序[2]。Windows程序的運行機制如圖1所示。程序開始執行時,先定義并初始化一些全局變量,然后進入入口函數WinMain(),在WinMain函數里完成窗口類的定義和注冊、創建和顯示窗口,并生成消息循環,等待消息隊列傳來消息。當有消息傳來時,先檢測是否為退出消息,如果是,則退出循環,結束程序,如果不是,則判斷消息類型,調用相應的窗口處理函數WndProc()進行處理,處理完后又回到循環,繼續檢測消息。

圖1 Windows程序運行機制
2.1API接口簡介
API是Windows操作系統和Windows應用程序之間的標準接口[3]。Win32應用程序采用API接口函數來編寫,是一種基于底層的開發模式。
Win32 API程序設計的一般方法是先利用VC++中的Win32應用程序向導生成一個簡單的應用程序框架,然后對框架程序中的窗口函數進行修改,并根據需要添加一些頭文件、源程序文件及資源文件。
2.2Win32應用程序框架結構
一個典型的Win32應用程序一般由頭文件(后綴名為.h)、源文件(后綴名為.c或.cpp)和資源文件(后綴名為.rc)組成。一般一個項目有一個資源文件,資源文件被創建后會自動生成與之對應的頭文件Reseouce.h,并預定義每個控件的值。用戶可以在資源視圖中創建自己想要的資源,如對話框、圖標、菜單等,創建好后會自動生成后綴名為.rc的資源文件和Reseouce.h頭文件。
同Windows程序的基本結構一樣,Win32應用程序一般由入口函數WinMain()和消息響應函數WinProc()兩大部分組成。其中,WinMain()函數是程序的入口函數,實現的功能有:設計窗口類、注冊窗口類、創建窗口、顯示及更新窗口、創建消息循環。WndProc()函數是消息響應函數,負責對接收到的窗口消息進行處理,WndProc()函數一般有一個或多個Switch語句組成,每條case語句對應一種消息處理。
3.1MFC簡介
MFC以C++類的形式對API函數進行了封裝,并且包含一個應用程序框架,簡化了Windows程序設計的難度,減少開發人員的工作量[4]。MFC項目的開發過程一般可分為:創建工程、可視化設計(添加資源和設計圖形用戶界面)、編寫程序代碼(添加消息響應函數,編寫實現算法)。
MFC應用程序執行過程如圖2所示,通過WinMain函數進入AfxWinMain函數,然后初始化線程,調用InitInstance初始化窗口,調用Run函數進入消息循環,等待消息傳來。若有消息傳來,先判斷是否為退出消息,如果是退出消息,則結束進程,如果不是,則分配到對應的消息處理函數處理,處理完后返回循環繼續檢測消息。

圖2 MFC應用程序執行過程
3.2MFC應用程序框架結構
利用MFC向導創建一個基于單文檔視圖的MFC標準應用程序,程序包含頭文件、源文件和資源文件,可通過解決方案管理器查看項目文檔結構,通過資源視圖查看和編輯資源,通過類視圖查看類。
一個最基本的單文檔視圖的MFC程序,包含C**App(應用類)、C**Doc(文檔類)、CMainFrame(主框架類)、和CAboutDlg(關于對話框類)五個類。每個類都對應頭文件(**.h文件)和源文件(**.cpp文件)兩個文件,頭文件中定義了類的各種變量、函數原形,源文件中完成類的實現。
(1)C**App應用類派生于MFC的CWinApp類,作用是初始化應用程序及運行該程序的所需的成員函數。該類中封裝了程序的主入口WinMain()函數,WinMain函數調用CWinApp的InitInstrance函數,在這里一個CMainFrame的對象被創建,文檔模板被創建,主窗口通過ShowWindow(SW_SHOW)被顯示出來。
(2)CMainFrame框架類派生于MFC的CFrameWnd類,負責管理應用程序的菜單、工具欄、狀態欄等,同時處理針對窗口操作的信息。該類中包含PreCreateWindow()和OnCreate()兩個函數,m_ wndStatusBar(管理狀態欄)和m_wndToolBar(管理工具欄)兩個對象。
(3)C**Doc文檔類派生于MFC的CDocument類,作用是存放應用程序的數據以及文件的保存加載功能。該類中包含三個函數:OnNewDocument()(用于初始化文檔)、Serialize()(串行化函數,用于保存和裝入文檔)、Dump()(用于調試和診斷)。文檔類需通過視圖類來實現與用戶的交互。
(4)C**View視圖類派生于MFC的CView類,負責管理視圖窗口,實現用戶數據的顯示和打印。該類中OnDraw()函數可實現視圖數據的顯示和刷新。
(5)CAboutDlg關于對話框類定義了ABOUT對話框。前四個都是在程序主窗口出現之前被創建的,CAboutDlg是在“關于”對話框彈出時被創建的。
資源文件中包含項目中會使用到的所有資源,其中**.rc文件是可以直接在 VC++ 中進行編輯的所有資源的列表。**.rc2文件包含不在VC++中進行編輯的資源,一般將不可由資源編輯器編輯的所有資源放在此文件中。**.ico文件這是應用程序中使用到的圖標文件。**.Bmp文件是項目中使用到的位圖文件。用戶可根據需要,在創建好的框架中添加自己的對話框和相應的消息處理函數。
Windows編程可以極大地方便程序開發用戶界面的工作,并使程序的結構合理、模塊化程序高。Win32 API和MFC編程方法是Windows程序設計的兩種方法。Win32 API直接調用Windows系統函數,是一種基于底層的編程方式,編程得到的代碼干凈、效率高、擴展性強,是其它所有方式實現的基礎。MFC是對win32的封裝,同時還供了建立Windows應用程序的框架結構,簡化了Windows程序設計的難度,是一種交互式開發方法。由于是封裝,所以MFC不可能完全實現Win32所有功能,在個性、特殊化方面還有差距。
兩者相比,win32更本質,MFC更抽像。實際編程中,應根據具體情況和任務恰當選擇實現方法,有助于提高效率。
[1]Jeffrey Richter(美).黃隴,李虎譯.Windows核心編程[M].機械工業出版社,2008,5.
[2]Charles Petzold(美).方敏,張勝梁,路平等譯.Windows程序設計[M].清華大學出版社,2010,9.
[3]范文慶,周彬彬,安靖.精通Windows API:函數、接口、編程實例[M].人民郵電出版社,2009,2.
[4]車忠志,孫雪雁.MFC應用程序基本框架分析[J].農業網絡信息,2010,9.
高群霞(1987—),四川成都人,碩士,講師,主要研究方向:計算機科學與技術,網站開發。