




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第1章 Windows編程基礎(chǔ),從main到WinMain,窗口和消息,C+的“類”,MFC編程,MFC應(yīng)用程序框架,1.1 從main到WinMain,學(xué)習(xí)編程往往以簡單的例子來入手,例如C語言,常常有下列簡單的框架代碼: #include int main() printf(Hello World!n);/* 輸出 */ return 0;/* 指定返回值 */ ,1.1.1 Windows等價程序,等價的Windows程序可以寫成: #include int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PST
2、R szCmdLine, int nCmdShow) MessageBox (NULL, TEXT(Hello, World!), TEXT(Hello), 0) ; return 0 ; ,1.1.1 Windows等價程序,在Visual C+ 6.0中的編輯、連接和運行的過程: 選擇“開始”“程序”“Microsoft Visual Studio 6.0” “Microsoft Visual C+ 6.0”,運行Visual C+ 6.0。第一次運行時,將顯示如圖1.1的“每日提示”對話框。,1.1.1 Windows等價程序, 選擇“文件”“新建”菜單命令,打開應(yīng)用程序向?qū)В@示出“新
3、建”對話框,如圖1.2所示。,1.1.1 Windows等價程序, 單擊“位置”編輯框右側(cè)的瀏覽按鈕 (圖1.2中的標(biāo)記2),從彈出的“選擇目錄”對話框指定項目所在的文件夾,如圖1.3所示。,1.1.1 Windows等價程序, 在“新建”對話框的“工程名稱”編輯框(圖1.2中的標(biāo)記3)中,輸入項目名稱Ex_HelloMsg,保留“平臺”下“Win32”復(fù)選框的默認“選中 ”狀態(tài),單擊“確定 ”按鈕進入下一步。 出現(xiàn)“Win32 Application”(Win32應(yīng)用程序)向?qū)У牟襟E1(共1步)對話框,從中可選擇要創(chuàng)建的應(yīng)用程序類型:“一個空工程”、“一個簡單的Win32程序”和“一個典型的
4、Hello World! 程序”,如圖1.4所示。,1.1.1 Windows等價程序, 選中“一個空工程”,單擊 “完成”按鈕,彈出“新建工程信息”對話框,如圖1.5所示。,1.1.1 Windows等價程序, 再次選擇“文件”“新建”菜單命令,Visual C+將打開“新建”對話框并自動切換到“文件”頁面,如圖1.6所示。,1.1.1 Windows等價程序, 單擊“確定 ”按鈕,系統(tǒng)將在創(chuàng)建的Win32項目工程“Ex_HelloMsg”中創(chuàng)建并添加一個新的文件HelloMsg.c,同時打開該文件窗口。 單擊編譯工具條 上的運行工具按鈕“ ”或直接按快捷鍵Ctrl+F5,就可以運行剛剛生成
5、的Ex_HelloMsg.exe,結(jié)果如圖1.7所示。,1.1.2 頭文件,HelloMsg.c是一個#include預(yù)處理指令開始,實際上在用C/C+編寫的Windows應(yīng)用程序的頭部都可以看到這樣的指令: #include 頭文件Windows.h是最主要的包含頭文件,它還包含了其它一些Windows頭文件。例如: windef.h:基本類型定義 winbase.h:內(nèi)核函數(shù) wingdi.h:用戶接口函數(shù) winuser.h:圖形設(shè)備接口函數(shù),1.1.3 程序入口函數(shù),在C/C+程序中,其入口函數(shù)都是main。但在Windows程序中,這一個入口函數(shù)是由WinMain來代替。該函數(shù)是在w
6、inbase.h中聲明的,其原型如下: int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd ); WinMain函數(shù)被聲明成為返回一個int值,同時WinMain函數(shù)名前還有WINAPI標(biāo)識符的修飾。WINAPI是一種“調(diào)用約定”宏,它在windef.h中有如下定義: #define WINAPI _stdcall、_stdcall是Pascal方式清理C方式壓棧,函數(shù)參數(shù)采用從右到左的壓棧方式,函數(shù)被調(diào)用者修改堆棧, WinMain函數(shù)的第一個和第二個參數(shù)都是“
7、HINSTANCE(實例句柄)”類型?!癏INSTANCE”中,H表示“Handle”,是“句柄”的意思。 WinMain函數(shù)的第三個參數(shù)lpCmdLine用來指定程序的命令行,其參數(shù)類型為“LPSTR”。但在HelloMsg.c中,卻將其改為PSTR。這兩種數(shù)據(jù)類型都是合法的,也都是指向字符串的指針類型。 WinMain函數(shù)的第四個參數(shù)nShowCmd用來指定程序最初顯示的方式,它可以是正常、最大化或最小化來顯示程序窗口。,1.1.4 MessageBox函數(shù),MessageBox是一個Win32 API函數(shù),用來彈出一個對話框窗口,顯示短信息。該函數(shù)具有下列原型: int MessageB
8、ox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType); 其中,第一個參數(shù)hWnd用來指定父窗口句柄,即對話框所在的窗口句柄。第二、三個參數(shù)分別用來指定顯示的消息內(nèi)容(lpText)和對話框窗口的標(biāo)題(lpCaption),最后一個參數(shù)用來指定在對話框中顯示的預(yù)定義的按鈕和圖標(biāo)標(biāo)識,它們是在winuser.h定義的一組以MB_開始的常數(shù)組合。例如:,續(xù)例HelloMsg.c 改變MessageBox的第四個參數(shù) #include int WINAPI WinMain (HINSTANCE hInstance, HINSTANC
9、E hPrevInstance, PSTR szCmdLine, int nCmdShow) MessageBox (NULL, TEXT(Hello, World!), TEXT(Hello),MB_ICONQUESTION | MB_ABORTRETRYIGNORE ) ; return 0 ; ,1.1.4 MessageBox函數(shù),程序運行后,結(jié)果如圖1.8所示。,1.2 窗口和消息,1.2.1 程序框架代碼 為了能處理上述兩個部分的內(nèi)容:窗口創(chuàng)建和消息處理,Windows提供了相應(yīng)的程序框架,如下面的例子。 創(chuàng)建并運行上述程序時,先創(chuàng)建一個Ex_HelloWin“空工程”,然后再創(chuàng)建
10、并添加新的源文件hellowin.c,輸入上述代碼,然后編連和運行,結(jié)果如圖1.9所示。,1.2.2 注冊窗口類,注冊的過程也就是將這些屬性告訴系統(tǒng),然后再調(diào)用CreateWindow函數(shù)創(chuàng)建出窗口。WNDCLASS結(jié)構(gòu)具有下列原型: typedef struct UINT style;/ 窗口的風(fēng)格 WNDPROC lpfnWndProc;/ 指定窗口的消息處理函數(shù)的窗口過程函數(shù) int cbClsExtra;/ 指定分配給窗口類結(jié)構(gòu)之后的額外字節(jié)數(shù) int cbWndExtra;/ 指定分配給窗口實例之后的額外字節(jié)數(shù) HINSTANCE hInstance;/ 指定窗口過程所對應(yīng)的實例句柄
11、 HICON hIcon;/ 指定窗口的圖標(biāo) HCURSOR hCursor;/ 指定窗口的鼠標(biāo)指針 HBRUSH hbrBackground;/ 指定窗口的背景畫刷 LPCTSTR lpszMenuName;/ 窗口的菜單資源名稱 LPCTSTR lpszClassName;/ 該窗口類的名稱 WNDCLASS, *PWNDCLASS;,1.2.2 注冊窗口類,該結(jié)構(gòu)有十個域(成員),其中第一個域style表示窗口類的風(fēng)格,它往往是由一些基本的預(yù)定義風(fēng)格通過位的“或”操作(操作符位“|”)組合而成。例如,在HelloWin.c中,有: WNDCLASSwndclass ;/ 窗口類 wndc
12、lass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = GetStockObject (
13、WHITE_BRUSH) ; wndclass.lpszMenuName = NULL; wndclass.lpszClassName = HelloWin;/ 窗口類名,1.2.3 創(chuàng)建和顯示窗口,用下列調(diào)用CreateWindow函數(shù)的代碼來創(chuàng)建窗口的: hwnd = CreateWindow (“HelloWin”, / 窗口類名,要與注冊時指定的相 我的窗口, / 窗口標(biāo)題 WS_OVERLAPPEDWINDOW, / 窗口樣式 CW_USEDEFAULT, / 窗口最初的 x 位置 CW_USEDEFAULT, / 窗口最初的 y 位置 480, / 窗口最初的 x 大小 320,
14、/ 窗口最初的 y 大小 NULL, / 父窗口句柄 NULL,/ 窗口菜單句柄 hInstance, / 應(yīng)用程序?qū)嵗浔?NULL) ; / 創(chuàng)建窗口的參數(shù),1.2.3 創(chuàng)建和顯示窗口,CreateWindow函數(shù)后面的參數(shù)中,仍用到了該應(yīng)用程序的實例句柄hInstance。如果窗口創(chuàng)建成功,返回值是新窗口的句柄,否則返回NULL。窗口創(chuàng)建后,并不會在屏幕上顯示出來。要能真正把窗口顯示在屏幕上,還得使用ShowWindow函數(shù),其原型如下: BOOL ShowWindow( HWND hWnd, int nCmdShow );,1.2.4 消息和消息處理,1. 消息循環(huán) 在Win32編程中
15、,消息循環(huán)是相當(dāng)重要的一個概念,看似很難,但使用起來卻是非常簡單。在WinMain函數(shù)的最后,有下列代碼: while (GetMessage (/ 將消息發(fā)送給窗口過程,這里是WndProc ,GetMessage函數(shù)就是用來從應(yīng)用程序的消息隊列中按照先進先出的原則將這些消息一個個的取出來,放進一個MSG結(jié)構(gòu)中去。它的原型如下: BOOL GetMessage( LPMSG lpMsg, / 指向一個MSG結(jié) 構(gòu)的指針,用來保存消息 HWND hWnd, / 指定哪個窗口的消息將被獲取 UINT wMsgFilterMin,/ 指定獲取的主消息值的最小值 UINT wMsgFilterMax
16、/ 指定獲取的主消息值的最大值 );,1.2.4 消息和消息處理,GetMessage函數(shù)用來將獲取的消息復(fù)制到一個MSG結(jié)構(gòu)中。如果隊列中沒有任何消息,該函數(shù)將一直空閑直到隊列中又有消息時再返回。如果隊列中已有消息,它將取出一個后返回。MSG結(jié)構(gòu)包含Windows消息的完整信息,其定義如下: typedef struct HWND hwnd; / 消息發(fā)向的窗口的句柄 UINT message;/ 主消息的標(biāo)識值 WPARAM wParam;/ 附消息值,其具體含義依賴于主消息值 LPARAM lParam;/ 附消息值,其具體含義依賴于主消息值 DWORD time;/ 消息放入消息隊列中
17、的時間 POINT pt;/ 消息放入消息隊列時的鼠標(biāo)坐標(biāo) MSG, *PMSG;,1.2.4 消息和消息處理,2. 消息處理 用于消息處理的函數(shù)又叫窗口過程,在這個函數(shù)中,不同的消息將用switch語句分配到不同的處理程序中去。Windows的消息處理函數(shù)都有一個確定的統(tǒng)一方式,即這種函數(shù)的參數(shù)個數(shù)和類型以及其返回值的類型都有明確的規(guī)定。 在HelloWin.c中,WinProc函數(shù)常處理3個消息,分別是WM_CREATE(創(chuàng)建窗口消息)、WM_PAINT(窗口重畫消息)、WM_DESTROY(銷毀窗口消息)。,3. 結(jié)束消息循環(huán) 當(dāng)用戶按Alt+F4或單擊窗口右上角的退出按鈕,系統(tǒng)就向應(yīng)用
18、程序發(fā)送一條WM_DESTROY的消息。在處理此消息時,調(diào)用了PostQuitMessage函數(shù),該函數(shù)會給窗口的消息隊列中發(fā)送一條WM_QUIT的消息。,case WM_PAINT: HDC hDC; PAINTSTRUCT ps; hDC=BeginPaint(hWnd,1.2.5 WM_PAINT消息,WM_PAINT是Win32的圖形和文本編程中經(jīng)常使用到的消息。當(dāng)窗口客戶區(qū)的一部分或全部變成“無效”時,則必須要“刷新”重繪,此時將向程序發(fā)生此消息。,1.2.6 Windows基本數(shù)據(jù)類型,在前面示例和函數(shù)原型中,看到了一些“奇怪”的數(shù)據(jù)類型,很多這樣的數(shù)據(jù)類型只是一些基本數(shù)據(jù)類型的別
19、名,以方便不同風(fēng)格的程序員使用。其中,表1.1列出了一些在Windows編程中常用的基本數(shù)據(jù)類型。,1.2.6 Windows基本數(shù)據(jù)類型,表1.2列出了常用的預(yù)定義句柄,它們的類型均為void *,即一個32位指針。,1.3 C+的“類”,1.3.1 類和對象 1. 類的定義 如同C語言的“結(jié)構(gòu)”類型,“類”也是一種復(fù)合的數(shù)據(jù)類型,只不過要更為復(fù)雜一些。在C+中,一個獨立“類”的聲明格式一般如下:,1.3.1 類和對象,成員函數(shù)既可以在類中進行定義,也可先在類中聲明函數(shù)原型,然后在類外定義,這種定義又稱為成員函數(shù)的實現(xiàn)。需要說明的是,成員函數(shù)在類外實現(xiàn)時,必須用作用域運算符“:”來告知編譯系
20、統(tǒng)該函數(shù)所屬的類。即:,例如,下面的類的定義示例代碼。,1.3.1 類和對象,2. 對象的定義和初始化 同變量一樣,類聲明后,就可以定義該類的對象。類的對象也有好幾種定義方式。但由于“類”比任何數(shù)據(jù)類型都要復(fù)雜得多,為了提高程序的可讀性,真正將“類”當(dāng)成一個密閉、“封裝”的盒子(接口),在程序中應(yīng)盡量使用對象的聲明之后定義方式,即按下列格式進行:, ;,1.3.1 類和對象,3. 對象成員的訪問 一個對象的成員就是該對象的類所定義的數(shù)據(jù)成員和成員函數(shù)。訪問對象的成員變量和成員函數(shù)與訪問一般結(jié)構(gòu)的變量的方法是一樣的。對于普通對象,其訪問格式如下:,. .(),若對象是一個指針,則對象的成員訪問格
21、式如下:,- -(),1.3.2 構(gòu)造函數(shù)和析構(gòu)函數(shù),1. 構(gòu)造函數(shù) C+規(guī)定,在類的定義中是不能對數(shù)據(jù)成員進行初始化的。為了能給數(shù)據(jù)成員設(shè)置某些初值,這時就要使用類的特殊成員函數(shù)構(gòu)造函數(shù)。構(gòu)造函數(shù)的最大特點是在對象建立時它會被自動執(zhí)行,因此用于變量、對象的初始化代碼一般放在構(gòu)造函數(shù)中。 C+規(guī)定,一個類的構(gòu)造函數(shù)必須與相應(yīng)的類同名,它可以帶參數(shù),也可以不帶參數(shù),與一般的成員函數(shù)定義相同,可以重載,也可以有默認的形參值。例如: 例Constructor.cpp 設(shè)計類的構(gòu)造函數(shù),1.3.2 構(gòu)造函數(shù)和析構(gòu)函數(shù),2. 析構(gòu)函數(shù) 與構(gòu)造函數(shù)相對應(yīng)的是析構(gòu)函數(shù)(Destructor)。析構(gòu)函數(shù)是C+
22、類中另一個特殊的成員函數(shù),它只是在類名稱前加上一個“”符號(邏輯非),以與構(gòu)造函數(shù)功能相反。其格式如下:,() ,1.3.3 new和delete,在C+中,new和delete是運算符,它們能有效地、直接地在堆內(nèi)存區(qū)中進行內(nèi)存的動態(tài)分配和釋放。例如: double *p; p = new double; *p = 30.4;/ 將值存放p所指向的內(nèi)存空間中 delete p; p = NULL;/ 一個好的習(xí)慣 其中,“p = new double;”是將自動根據(jù)double類型的空間大小開辟一個內(nèi)存空間,并將其首地址作為指針變量p的值。當(dāng)然,也可在開辟內(nèi)存空間時,對內(nèi)存空間里的內(nèi)容進行初始
23、化。如上述代碼可寫成: double *p; p = new double(30.4);/ 使p所指向的內(nèi)存空間的初值為30.4,1.3.4 this指針,this指針是類中一個特殊指針,當(dāng)類實例化(用類定義對象)時,this指針的指向?qū)ο笞约?,而在類的聲明時指向類本身。 下面來看一個示例,它是通過this指針用另一個對象直接給對象賦值。 在類CPoint中,使用this指針的成員函數(shù)是Copy,此時this指針指向類自己,在成員函數(shù)Copy中,由于語句“*this = one”等到對象調(diào)用時才會執(zhí)行,因而當(dāng)在main函數(shù)調(diào)用“pt1.Copy(pt2);”時,this指針指向?qū)ο髉t1,此時
24、“*this = one”是將one的內(nèi)容拷貝到類對象pt1中,這樣就使得pt1的數(shù)據(jù)成員的值等于pt2的數(shù)據(jù)成員的值。因此main函數(shù)中最后的語句“pt1.print();”輸出的結(jié)果就是等于pt2的結(jié)果。程序運行的結(jié)果如下:,1.3.4 this指針,當(dāng)成員函數(shù)的形參名與該類的成員變量名同名時,則必須用this指針來顯式區(qū)分,例如: class CPoint public: CPoint( int x = 0, int y = 0) this-x = x;this-y = y; void Offset(int x, int y) (*this).x += x; (*this).y += y
25、; void Print() const coutPoint(x, y)endl; private: int x, y; ;,1.3.5 繼承和派生,1. 派生類的定義 在C+中,一個派生類的定義可按下列格式:,class : , , ;,1.3.5 繼承和派生,2. 繼承方式 類的繼承使得基類可以向派生類傳遞基類的屬性和方法,但在派生類中訪問基類的屬性和方法不僅取決于基類成員的訪問屬性而且還取決于其繼承方式。 繼承方式能有條件地改變了在派生類中的基類成員的訪問屬性,從而使派生類對象對派生類中的自身成員和基類成員的訪問均取決于成員的訪問屬性。C+繼承方式有3種:public(公有)、priva
26、te(私有)及protected(保護)。,1.3.5 繼承和派生,3. 派生類數(shù)據(jù)成員初始化 C+規(guī)定,派生類中對象成員初值的設(shè)定應(yīng)在初始化列表中進行,因此一個派生類的構(gòu)造函數(shù)的定義可有下列格式:,1.3.5 繼承和派生,4. 基類成員的訪問 假設(shè),派生類B公有繼承了基類A,A中的公有成員為m,則在派生類B及其對象中訪問基類A成員m的方式有: 若派生類B中無任何和A基類成員m同名的成員時,則可在派生類B中直接引用m。若有同名成員存在,則在派生類B中須指定成員所屬的類,即訪問形式為“A:m”。 若派生類B對象oB是一個普通對象,當(dāng)派生類B中無任何和A基類成員m同名的成員時,則通過oB訪問基類成
27、員m的形式為“oB.m”。若派生類B中有同名成員m存在,則通過oB訪問基類成員m的形式為“oB.A:m”。 若派生類B對象poB是一個指針對象,當(dāng)派生類B中無任何和A基類成員m同名的成員時,則通過poB訪問基類成員m的形式為“poB-m”,若派生類B中有同名成員m存在,則通過poB訪問基類成員m的形式為“poB-A:m”。,1.3.6 虛函數(shù),多態(tài)(Polymorphism),是指不同類型的對象接收相同的消息時產(chǎn)生不同的行為。在C+中,多態(tài)可分為2種:編譯時的多態(tài)和運行時的多態(tài)。 虛函數(shù)是用關(guān)鍵字virtual來修飾基類中的public或protected的成員函數(shù)。在基類中,虛函數(shù)定義的一般
28、格式如下:,virtual ( ) ,例VirtualFunc.cpp 虛函數(shù)的動態(tài)聯(lián)編,程序運行的結(jié)果如下:,1.4 MFC編程,1.4.1 MFC概述 在用MFC應(yīng)用程序向?qū)?chuàng)建的程序中仍然保留stdafx.h頭文件包含,它是每個應(yīng)用程序所必有的預(yù)編譯頭文件,程序所用到的Visual C+頭文件包含語句一般均添加到這個文件中。MFC類的基本層次結(jié)構(gòu)如圖1.10所示。,1.4.2 MFC程序框架,來看一個MFC應(yīng)用程序。 例Ex_HelloMFC 基本MFC的Windows程序框架 創(chuàng)建一個“一個空工程”類型的Win32 Application項目Ex_HelloMFC。 選擇“文件”“新建
29、”菜單命令,顯示出“新建”對話框。單擊“文件”標(biāo)簽,在左邊的文件類型列表框中選擇C+ Source File項,在右邊的“文件”下的編輯框中鍵入HelloMFC.cpp,單擊 按鈕。,1.4.2 MFC程序框架, 在文檔窗口中輸入上面的代碼,選擇“工程”“設(shè)置”菜單命令,在出現(xiàn)的對話框中選擇“常規(guī)”(General)標(biāo)簽,然后在“Microsoft 基礎(chǔ)類”組合框中,選擇“Use MFC in a Shared DLL(使用MFC作為一個共享DLL)”,如圖1.11所示,單擊 確定按鈕。 編譯運行,結(jié)果如圖1.12所示。,1.4.3 程序運行機制,從示例Ex_HelloMFC可以看出,MFC是
30、使用afxwin.h來代替頭文件windows.h,但在Ex_HelloMFC程序中卻看不到Windows應(yīng)用程序所必須的程序入口函數(shù)WinMain。這是因為MFC將它隱藏在應(yīng)用程序框架內(nèi)部了。 下面來看看上述程序中InitInstance的執(zhí)行過程: 首先執(zhí)行的是: m_pMainWnd = new CMainFrame(); 該語句用來創(chuàng)建從CFrameWnd類派生而來的用戶框架窗口CMainFrame類對象,繼而調(diào)用該類的構(gòu)造函數(shù),使得Create函數(shù)被調(diào)用,完成了窗口創(chuàng)建工作。 然后執(zhí)行后面兩句,用作窗口的顯示和更新。 m_pMainWnd-ShowWindow(m_nCmdShow)
31、; m_pMainWnd-UpdateWindow(); 最后返回TRUE,表示窗口創(chuàng)建成功。,1.4.4 消息映射,按照MFC的消息映射機制,映射一個消息的過程是由三個部分組成的: 在處理消息的類中,使用消息宏DECLARE_MESSAGE_MAP()聲明對消息映射的支持,并在該宏之前聲明消息處理函數(shù)。例如前面示例中的: protected: afx_msg void OnPaint(); DECLARE_MESSAGE_MAP() 使用BEGIN_MESSAGE_MAP和END_MESSAGE_MAP宏在類聲明之后的地方定義該類支持的消息映射入口點,所有消息映射宏都添加在這里,當(dāng)然不同的消
32、息MFC都會有不同的消息映射宏。例如: BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) END_MESSAGE_MAP(),1.4.4 消息映射,定義消息處理函數(shù)。例如: void CMainFrame:OnPaint() CPaintDC dc(this); CRectrc; GetClientRect( ,1.5 MFC應(yīng)用程序框架,1.5.1 MFC應(yīng)用程序類型 Visual C+ 6.0中的MFC AppWizard能為用戶快速、高效、自動地生成一些常用的標(biāo)準程序結(jié)構(gòu)和編程風(fēng)格,它們被稱為應(yīng)用程序框架結(jié)構(gòu)。MFC AppWizard提供的應(yīng)用程序框架類
33、型如表1.3所示。,1.5.2 文檔應(yīng)用程序創(chuàng)建,1. 創(chuàng)建 啟動Visual C+ 6.0,選擇“文件”“新建”菜單,在彈出的“新建”對話框的工程標(biāo)簽頁面中,選擇MFC AppWizard(exe)的項目類型。單擊位置框右側(cè)的按鈕 ,在彈出的對話框中,將該應(yīng)用程序的文件夾定位在“E:Visual C+程序第1章”,并在工程名稱編輯框中輸入應(yīng)用程序名Ex_SDI,結(jié)果如圖1.13所示。,1.5.2 文檔應(yīng)用程序創(chuàng)建,2. 第一步 單擊 按鈕進入下一步,出現(xiàn)如圖1.14所示的對話框。,1.5.2 文檔應(yīng)用程序創(chuàng)建,3. 第二步 單擊 按鈕,出現(xiàn)如圖1.15所示的對話框。,1.5.2 文檔應(yīng)用程序
34、創(chuàng)建,4. 第三步 保留默認選項,單擊下一步按鈕,出現(xiàn)如圖1.16所示的對話框。,1.5.2 文檔應(yīng)用程序創(chuàng)建,5. 第四步 保留默認選項,單擊 下一步按鈕,出現(xiàn)如圖1.17所示的對話框。,1.5.2 文檔應(yīng)用程序創(chuàng)建,6. 第五步 保留默認選項,單擊下一步按鈕,彈出如圖1.18所示的對話框。,1.5.2 文檔應(yīng)用程序創(chuàng)建,7. 第六步 保留默認選項,單擊 按鈕,出現(xiàn)如圖1.19所示的對話框。,1.5.2 文檔應(yīng)用程序創(chuàng)建,8. 編譯并運行 單擊編譯工具欄 上的運行工具按鈕“ ”或按快捷鍵Ctrl+F5,系統(tǒng)開始編譯、連接并運行生成的單文檔應(yīng)用程序可執(zhí)行文件Ex_SDI.exe,運行結(jié)果如圖1.20所示。,1.5.3 項目文件和項目配置,Visual C+是用文件夾來管理一個應(yīng)用程序項目的,且將項目名作為文件夾名,在此文件夾下包含源程序代碼文件(.cpp,.h)、項目文件(.dsp)以及項目工作區(qū)文件(.dsw)等。表1.4列出了這些文件類型的的含義。,1.5.3 項目文件和項目配置,除了上述文件外,還有相應(yīng)的Debug(調(diào)試)或Re
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 冀教版一年級下冊數(shù)學(xué)教學(xué)計劃(含進度表)
- 人教版九年級下冊數(shù)學(xué)教學(xué)計劃(及進度表)
- 2025年湖北省中考英語模擬試卷(附答案)
- 2025年第十屆安全生產(chǎn)知識競賽經(jīng)典題庫及答案(共六套)
- 農(nóng)村小吃店開業(yè)致詞簡短
- 高新科技研發(fā)居間存款合同
- 航空票務(wù)居間服務(wù)合同
- 建筑柴油供應(yīng)居間協(xié)議樣本
- 城市公共交通運營合同
- 停車場智能門禁管理系統(tǒng)
- 市政道路工程監(jiān)理大綱范本完整
- 浙江大學(xué)C語言期末上機考試題
- 西安市城鎮(zhèn)基本醫(yī)療保險特殊藥品治療(備案計劃)申請表【模板】
- JJG 700-2016氣相色譜儀
- GB/T 26939-2011種羊鑒定術(shù)語、項目與符號
- 可編輯的中國地圖
- 《TV背光中光學(xué)膜片介紹及常見光學(xué)問題分析》復(fù)習(xí)課件
- 手衛(wèi)生考核評分標(biāo)準
- 部編版語文二年級下冊生字表(注音)
- 四級消防設(shè)施操作員(監(jiān)控)考核題庫與答案
- 《我在長大》-完整版PPT
評論
0/150
提交評論