版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、.,第2章 MFC應(yīng)用程序設(shè)計(jì)的開發(fā)工具,Forwithy New,.,本章各小節(jié)目錄,2.1 使用MFC AppWizard 2.2 使用ClassView 2.3 使用ResourceView 2.4 使用FileView 2.5 使用ClassWizard 2.6 使用DataView 2.7 管理多個程序項(xiàng)目 2.8 使用各設(shè)計(jì)工具進(jìn)行編程的幾點(diǎn)建議,.,VC+(本書以下各章凡提到VC+,均是指5.0以上版本)是一個功能強(qiáng)大的可視化編程工具,是目前功能最為強(qiáng)大的程序開發(fā)平臺之一,而利用MFC程序框架進(jìn)行應(yīng)用程序設(shè)計(jì),是VC+最有效和強(qiáng)大的部分。當(dāng)然,一個開發(fā)工具的功能越強(qiáng)大,那么其本身
2、組成就越龐大,而要完全掌握這個工具所需要的難度就越大,企望功能強(qiáng)大且省事又短小的程序設(shè)計(jì)在目前階段還是不現(xiàn)實(shí)的。VC+是一個非常復(fù)雜的程序開發(fā)包,包含了文本編輯器、資源編輯器、工程,.,創(chuàng)建和管理工具、調(diào)試器、在線幫助等各個工具,在這個環(huán)境中,程序員可以完成應(yīng)用程序的創(chuàng)建、編碼、測試、完善等各個階段的工作。下圖是VC+6.0的工作界面。,圖2.1 VC+6.0的工作界面,.,本章對VC+開發(fā)環(huán)境中的一些輔助開發(fā)工具進(jìn)行簡要的介紹。對于這些輔助開發(fā)工具,在大量的關(guān)于VC+的書籍中有介紹,但大多數(shù)的介紹都是針對使用這些工具的操作步驟,而沒有具體分析這些輔助工具的工作基礎(chǔ),造成大量的VC+程序設(shè)計(jì)者
3、對工具的神秘感和依賴性,離開這些輔助設(shè)計(jì)工具就不能進(jìn)行程序設(shè)計(jì),也就更不能按照自己的意愿靈活的組織程序,而陷于固定的程序框架中不能自拔。本章,將從這些工具的工作基礎(chǔ)及實(shí)現(xiàn)過程等方面分析這,.,些工具的作用,達(dá)到真正理解MFC程序框架的目的。作者結(jié)合自己進(jìn)行VC+程序設(shè)計(jì)的一些經(jīng)驗(yàn)和體會,對進(jìn)行程序設(shè)計(jì)時用的比較多的幾個工具進(jìn)行完整的剖析。在介紹這些工具之前告訴讀者的是:大部分工具都是在進(jìn)行VC+程序設(shè)計(jì)時起輔助作用的,而非必須的,從一定意義上講,這些工具更適合于具有一定開發(fā)經(jīng)驗(yàn)的程序員。對初學(xué)者來說,如果不去真正剖析程序的結(jié)構(gòu)而只停留在使用這些工具的層面上,那將會事倍功半。,.,本章主要介紹A
4、ppWizard、ClassView、ClassWizard、FileView、ResourceView、DataView幾個工具及其相關(guān)的操作。 AppWizard(Application Wizard,應(yīng)用程序向?qū)?的作用是用來建立程序框架。因?yàn)閂C+的功能非常強(qiáng)大,可以用來開發(fā)多種不同的應(yīng)用程序,例如:可以開發(fā)基于MFC的Window應(yīng)用程序(.exe),基于Windows的動態(tài)鏈接庫程序(.dll),ActiveX控件程序(.ocx)等等。對于,.,每一類應(yīng)用程序來說,并不是從零開始進(jìn)行開發(fā),微軟的系統(tǒng)設(shè)計(jì)者們?yōu)殚_發(fā)多種應(yīng)用程序設(shè)計(jì)好了程序的框架部分,通過AppWizard就可以自動生
5、成包含了基本程序框架的應(yīng)用程序包,應(yīng)用開發(fā)者可以在此基礎(chǔ)上進(jìn)行程序的設(shè)計(jì)。 ClassView(類視圖)是VC+工作區(qū)上的一個對類和結(jié)構(gòu)等進(jìn)行管理的工具,它通過對應(yīng)用程序的頭文件(.h)和實(shí)現(xiàn)文件(.cpp)進(jìn)行處理,從中得到并管理應(yīng)用程序中所包含的類。,.,可以實(shí)現(xiàn)增加類、增加類的函數(shù)和變量,以及在頭文件(.h)和實(shí)現(xiàn)文件(.cpp)中定位各個類、類的成員函數(shù)及變量等各種操作。 ClassWizard(類向?qū)?是VC+中功能十分強(qiáng)大的一個輔助編程工具,它通過對頭文件(.h)和實(shí)現(xiàn)文件(.cpp)進(jìn)行處理,能夠?qū)︻愔械南⑻幚砗瘮?shù)、可重載的虛函數(shù)、映射數(shù)據(jù)、Automation屬性、Activ
6、eX事件等進(jìn)行管理和輔助編程。 ResourceView(資源視圖)是對程序的資源進(jìn)行可,.,視化管理的工具。利用它調(diào)用AppStudio可以對程序所擁有的各種資源(菜單、工具條、對話框、加速鍵、熱鍵等)進(jìn)行可視化管理。 FileView(文件視圖)是管理一個開發(fā)項(xiàng)目所包含的所有文件的工具。通過它可以用來管理一個開發(fā)項(xiàng)目所包含的源文件。 DataView(數(shù)據(jù)視圖)是在VC+平臺中管理和使用ODBC數(shù)據(jù)源的一個工具。用來管理進(jìn)行數(shù)據(jù)庫程序設(shè)計(jì)時連接的數(shù)據(jù)源,在VC+中利用ODBC或DAO等進(jìn)行數(shù)據(jù)庫程序設(shè)計(jì)時、需要使,.,用別的數(shù)據(jù)源,如可以使用Foxpro、Access、Oracle、SQL
7、 Server等的數(shù)據(jù)庫文件,通過DataView可以在VC+開發(fā)環(huán)境下對各種數(shù)據(jù)庫提供的數(shù)據(jù)源的瀏覽和管理,對于進(jìn)行數(shù)據(jù)庫應(yīng)用程序設(shè)計(jì)具有十分重要的作用。 在以下的各節(jié)中,將對這些主要工具進(jìn)行分析,并介紹與其有關(guān)的主要操作。,.,2.1 使用MFC AppWizard,VC+能夠用來創(chuàng)建多種類型的MFC應(yīng)用程序,不同的應(yīng)用程序具有不同的應(yīng)用程序,VC+系統(tǒng)的設(shè)計(jì)者們創(chuàng)建了程序框架生成工具AppWizard,用它來創(chuàng)建開發(fā)各類MFC應(yīng)用程序所需要的程序框架。這樣,不論是資深程序員還是初學(xué)者,都可以用這個工具生成包含了一些基本功能的框架程序,在此基礎(chǔ)再進(jìn)行應(yīng)用程序的開發(fā)工作。,.,2.1.1 M
8、FC AppWizard的啟動 在VC+工作區(qū)下,運(yùn)行“File”菜單下的菜單項(xiàng)“New”,就會進(jìn)入一個New對話框,在對話框頂部有四個選擇標(biāo)簽“Files”(文件)、“Projects”(項(xiàng)目)、“Workspaces”(工作區(qū))、“Other Documents”(其他文檔),“Files”標(biāo)簽下的選項(xiàng)用來選擇創(chuàng)建各種類型的文件(如.h,.cpp等);“Workspace”標(biāo)簽下的選項(xiàng)用來創(chuàng)建一個工作區(qū);“Other Documents”標(biāo)簽下的選項(xiàng)用來創(chuàng)建Excel,Word等文檔;“Projects”標(biāo)簽下的選項(xiàng)用來創(chuàng)建各種應(yīng)用程序框架。用鼠標(biāo)點(diǎn)中“Projects”標(biāo)簽,就會進(jìn)入如下
9、圖所示的對話框界面。在MFC AppWizard中可以創(chuàng)建的應(yīng)用程序框架見表2-1。,.,圖2 AppWizard創(chuàng)建框架程序?qū)υ捒?.,表2-1 AppWizard創(chuàng)建的應(yīng)用程序類型,Active Template Library活動模板庫,.,在表2-1所列的應(yīng)用程序框架中,最常用的是開發(fā)基于MFC的一般應(yīng)用程序(MFC AppWizard(exe))。本書講述的主要內(nèi)容是:利用AppWizard生成的MFC應(yīng)用程序框架為基礎(chǔ),引導(dǎo)讀者具體開發(fā)一個實(shí)際的圖形系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng)和矢量圖形系統(tǒng)與數(shù)據(jù)庫管理系統(tǒng)的連接,在開發(fā)的過程中,達(dá)到同時掌握GIS編程技術(shù)和MFC程序設(shè)計(jì)方法的目的。,.,
10、2.1.2 利用MFC AppWizard產(chǎn)生MFC應(yīng)用程序的步驟 在這一節(jié)中,應(yīng)用MFC AppWizard生成一個叫做Draw的應(yīng)用程序。以下是利用AppWizard產(chǎn)生MFC應(yīng)用程序框架的步驟: 首先,進(jìn)入VC+的工作區(qū),運(yùn)行工作區(qū)上的“File”菜單下的“New”命令,打開New對話框,然后進(jìn)行如下步驟的操作: 選擇New對話框中的“Projects”標(biāo)簽,進(jìn)入到圖2-2所示的對話框界面。因?yàn)槟壳耙傻氖且话鉓FC程序,所以從列表框中選擇MFC AppWizard(exe)選項(xiàng),在“Project Name”(項(xiàng)目名稱)編輯框中,輸入要生成的應(yīng)用項(xiàng)目的名稱Draw,在“Locatio
11、n”編輯框中列出的是這個項(xiàng)目所在的路徑名稱。對所在目錄可以進(jìn)行修改而設(shè)置其他路徑,如果用戶輸入的路徑,.,不存在,AppWizard會自動進(jìn)行創(chuàng)建。 在PlatForms(平臺)區(qū)中只選擇“Win32”復(fù)選框,清除其他的選項(xiàng)。 在完成了以上的輸入或選擇操作之后,單擊“OK”按鈕,MFC AppWizard會生成該項(xiàng)目目錄,并進(jìn)入MFC AppWizard-Step1對話框。 在此對話框中,要求用戶對生成程序的文檔類型進(jìn)行選擇,共有三個選項(xiàng):Single documents(單文檔界面)、Multiple documents(多文檔界面)和Dialog-based(基于對話框的)。默認(rèn)的選項(xiàng)為M
12、ultiple documents。在此對話框中,還要對資源文件中的使用的語言進(jìn)行選擇,選擇“中文(中國)APPWZCHS.DLL”選項(xiàng)。單擊Next按鈕,就會進(jìn)入MFC AppWizard-Step2 of 6對話框。 在接下來的對話框中,要求用戶對應(yīng)用程序支持的,.,數(shù)據(jù)庫類型進(jìn)行選擇。共有四種選擇:None(不支持?jǐn)?shù)據(jù)庫)、Header file only(僅包含頭文件)、Database view without file support(無文件支持的數(shù)據(jù)庫視圖結(jié)構(gòu))和Database view with file support(有文件支持的額數(shù)據(jù)庫視圖結(jié)構(gòu))。本應(yīng)用程序在開發(fā)中要涉
13、及到數(shù)據(jù)庫操作,但又不是直接應(yīng)用AppWizard產(chǎn)生的應(yīng)用程序框架進(jìn)行程序設(shè)計(jì),所以選擇第2個選項(xiàng):Heading file only,只是在產(chǎn)生的應(yīng)用程序中包含了進(jìn)行數(shù)據(jù)庫應(yīng)用程序設(shè)計(jì)所需要的頭文件(在stdafx.h文件中插入了頭文件)。單擊Next按鈕,就會進(jìn)入MFC AppWizard-Step3 of 6對話框。 在該第3步對話框中,要求用戶選擇支持的OLE類型。共有五種選擇:None(不支持OLE)、Container(生成OLE容器應(yīng)用程序)、Mini-server(生成小型OLE服務(wù)器),Object Linking and Embedding 對象連接與嵌入,.,Full-
14、server(生成全OLE服務(wù)器應(yīng)用程序)和Both container and server(生成OLE容器和服務(wù)器應(yīng)用程序)。在本應(yīng)用程序中,不進(jìn)行與OLE有關(guān)的程序功能設(shè)計(jì),保持默認(rèn)選形:None。 在圖2-6所示的MFC AppWizard-Step 4 of 6對話框中,要求對生成的應(yīng)用程序包含的特征進(jìn)行選擇。具有以下幾個可選項(xiàng):Doching toolbar(具有一個固定的工具條)、Initial status(具有可初始化的狀態(tài)條)、Printing and print preview(具有打印和打印預(yù)覽功能)、3D control(3D控件)、Context-sensitive
15、(具有上下文相關(guān)幫助功能)。在本例中,選中所有的這些選項(xiàng)。單擊Next按鈕,就會進(jìn)入圖2-7所示的MFC AppWizard-Step 5 of 6對話框。,.,.,.,.,.,在圖2-7所示的MFC AppWizard-Step 5 of 6對話框中,用戶需要對是否在生成的程序源代碼中加入注釋進(jìn)行選擇。在本例中,選擇“Yes, please”(加入注釋)選項(xiàng)。另外有一個選項(xiàng)是選擇在產(chǎn)生的應(yīng)用程序中如何應(yīng)用MFC,有兩種選擇:“As a shared DLL”(作為共享動態(tài)鏈接庫)和“As a statically linked library”(作為靜態(tài)鏈接庫)。選擇“As a shared
16、 DLL”選項(xiàng),單擊Next按鈕,就會進(jìn)入圖2-8所示的MFC AppWizard-Step 6 of 6對話框。,.,在上圖所示的對話框中,用戶可以選擇或修改要創(chuàng)建應(yīng)用程序的類、文件名稱以及所要繼承的基類,一般保留默認(rèn)參數(shù)不變。 在這個對話框中單擊“Finish”按鈕,就完成了生成新程序項(xiàng)目Draw的操作過程。MFC AppWizard將在選定的目錄下生成一個應(yīng)用程序項(xiàng)目Draw的所有源文件,并在當(dāng)前開發(fā)平臺上打開這個程序項(xiàng)目Draw,對程序項(xiàng)目進(jìn)行編譯后運(yùn)行,就會得到如圖2-9的執(zhí)行界面。,.,執(zhí)行的結(jié)果是令人鼓舞的,輕而易舉的就產(chǎn)生了一個跟別的Windows系統(tǒng)類似的窗口系統(tǒng)。它包含著一
17、個主菜單,一個工具條和一個狀態(tài)條等部件。在第3章,將對程序的組成和結(jié)構(gòu)進(jìn)行分析,在以后的章節(jié)中,以這個程序框架為基礎(chǔ),逐步擴(kuò)充系統(tǒng)的功能,最終實(shí)現(xiàn)一個基本的GIS。,.,2.2 使用ClassView,ClassView是VC+工作區(qū)上的一個工具,它通過對應(yīng)用程序的頭文件(.h)和實(shí)現(xiàn)文件(.cpp)進(jìn)行處理,從中得到應(yīng)用程序中所包含的類,并能夠?qū)崿F(xiàn)增加類、增加類的成員函數(shù)和變量,以及在頭文件(.h)和實(shí)現(xiàn)文件(.cpp)中定位各個類、類的成員函數(shù)和變量等各種操作。 用VC+開發(fā)應(yīng)用程序時,隨著系統(tǒng)功能的增加、代碼的增多,系統(tǒng)具有的頭文件和實(shí)現(xiàn)文件會越來越多,文件也會越來越大,在源代碼文件中尋
18、找類和類的成員函數(shù)、成員變量的位置將會變的困,.,難而繁瑣。通過ClassView可以使成員函數(shù)、變量的定位和增加類、類的成員的工作變得較為容易。,.,2.2.1 啟動ClassView ClassView的啟動非常簡單,在VC+開發(fā)平臺下單擊“ClassView”選擇標(biāo)簽,就會在工作區(qū)中列出當(dāng)前應(yīng)用程序項(xiàng)目所包含的類(圖2-10)。用鼠標(biāo)單擊“+”會打開各子項(xiàng)目(如在一個類邊上單擊,會列出此類包含的成員函數(shù)和變量),單擊“-”會關(guān)閉打開的子項(xiàng)目。,.,2.2.2 編輯定位 可以利用ClassView的定位功能在源文件中迅速找到需要進(jìn)行編輯的位置。在需要編輯的類或類的成員上雙擊鼠標(biāo)左鍵,就會在
19、文件編輯框內(nèi)打開包含類的定義或類的成員的源文件,并將編輯位置移動到類或類的成員的開始處。也可以在類或類的成員上單擊鼠標(biāo)右鍵,調(diào)出一個快捷菜單,選擇運(yùn)行快捷菜單中的“Go to Definition”(到定義處)或“Go to Declaration”(到聲明處)菜單項(xiàng),同樣可以在文件編輯框中指向類或類的成員的定義或聲明處(對于類來說,只有定義處)。,.,2.2.3 增加類 在如圖2-10所示的ClassView工作區(qū)中,在最高一級的列表項(xiàng)目上(顯示“Draw Classes”處)單擊鼠標(biāo)右鍵,調(diào)出快捷菜單,在菜單中選擇運(yùn)行“New Class”菜單項(xiàng),就會進(jìn)入圖2-11所示的對話框。 在圖2-
20、11所示的對話框中,在“Class Type”列表中有三種類型的類供選擇:MFC Class、Generic Class、Form Class(在VC+5.0中,沒有此選項(xiàng)),MFC Class選項(xiàng)用來選擇增加MFC類的派生類;Generic Class選項(xiàng)用來選擇增加一般的C+類;Form Class選項(xiàng)用來選擇增加幾個特殊MFC類的派生類,選擇這個選項(xiàng)時可選擇增加Cdialog、CRecordView、CDaoRecordView、,.,CFormView等類的派生類。圖2-11所示的界面是選擇MFC Class選項(xiàng)后得到的。 (1)增加MFC派生類 進(jìn)行增加一個MFC派生類的操作時,需要
21、作出以下選擇:,VS版,.,選擇基類 如果增加的類是從已有的MFC類派生而來的,則需要對繼承的基類進(jìn)行選擇。例如,在2.1.2小節(jié)生成的應(yīng)用程序Draw框架中,CDrawDoc類是由文檔MFC文檔類CDocument類派生而來的;CView類是由窗口類CWnd類派生而來的。從“Base Class”選擇列表框中選擇基類。 確定類的存放位置 此項(xiàng)是確定增加類的定義和實(shí)現(xiàn)部分分別所在的文件,即這個類的頭文件和實(shí)現(xiàn)文件。默認(rèn)情況下,當(dāng)你輸入增加類的名稱時,系統(tǒng)自動將頭文件和實(shí)現(xiàn)文件設(shè)置成與類的名稱相同(如在對話框的“Name”編輯框中輸入類名稱Cline時,則頭文件名稱為line.h,實(shí)現(xiàn)文件名稱為
22、line.cpp)。如果需要人為確定頭文件和實(shí)現(xiàn)文件,則需單擊“Change”按鈕,進(jìn)入圖,.,2-12所示的對話框,在這個對話框中輸入頭文件和實(shí)現(xiàn)文件的名稱,可以采用已經(jīng)有的文件,也可重建新的文件。頭文件和實(shí)現(xiàn)文件也可以在同一個文件中(一般在.cpp文件)。按“OK”退出文件選擇對話框就確定了類的頭文件和實(shí)現(xiàn)文件。 確定了以上參數(shù)后,在“Name”編輯框中輸入增加類的名稱,點(diǎn)擊圖2-11所示對話框中的“OK”按鈕,系統(tǒng)就會在當(dāng)前應(yīng)用程序Draw中增加類的定義和實(shí)現(xiàn)代碼部分。應(yīng)用程序Draw中的CDrawDoc、CDrawView等幾個類,就是在程序生成階段由以上討論的增加類的工具產(chǎn)生的,在次
23、不再舉例說明。 (2)增加Form派生類,.,在圖2-11對話框的“Class Type”選擇列表框中選擇Generic Class選項(xiàng),就變成增加Form類的對話框界面。與圖2-11不同的是,“Dialog ID”選擇列表框處于可選擇狀態(tài)。增加Form派生類的過程與增加MFC派生類相同,唯一不同的是需要從“Dialog ID”列表選擇框中選擇要增加的Form派生類所采用的對話框資源。 (3)增加一般類 在圖2-11所示的對話框中,從“Class Type”列表框中選擇Generic Class選項(xiàng),就會進(jìn)入圖2-13所示的對話框。在這個對話框。在這個對話框中可以增加一般C+類,操作過程如下:
24、,.,點(diǎn)擊“Change”按鈕,進(jìn)入圖2-12所示的對話框輸入類的頭文件和實(shí)現(xiàn)文件。 在“Base Class(es)”列表框中輸入要繼承的基類(可以一個,也可以多個),用鼠標(biāo)在列表框“Base Class(es)”中點(diǎn)擊,就可以出現(xiàn)編輯框和列表框輸入基類的名稱和選擇繼承基類時的類型。 在“Name”編輯框中輸入類的名稱。點(diǎn)擊“OK”按鈕,就在當(dāng)前應(yīng)用程序Draw中增加一個一般C+類。 按照以上步驟,在應(yīng)用程序Draw中增加一個叫做CLine的類,類的頭文件在drawdoc.h,實(shí)現(xiàn)文件在drawdoc.cpp。操作完成后,可以在頭文件drawdoc.h中找到Cline類的定義: class
25、CLine public: CLine(void); /構(gòu)造函數(shù) CLine(void); /析構(gòu)函數(shù) ;,.,在實(shí)現(xiàn)文件drawdoc.cpp中,找到空的構(gòu)造函數(shù)和析構(gòu)函數(shù)實(shí)現(xiàn)代碼: CLine:CLine(void) CLine:CLine(void) ,.,2.2.4 增加類的成員 用ClassView可以用來增加類的成員,這些成員包括成員變量,成員函數(shù),以及重載虛擬函數(shù)等。以下簡單介紹一些主要操作過程。 (1)增加成員變量 在圖2-10所示的工作區(qū)中,在需要增加成員變量的類上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇運(yùn)行“Add Member Variable”(增加成員變量)菜單項(xiàng),就會進(jìn)
26、入圖2-14所示的對話框。,.,成員變量的增加過程非常簡單,在對話框中的“Variable Type”編輯框中輸入變量的類型(如int,float,char,CPoint等),在“Variable Name”編輯框中輸入變量的名稱,在“Access”框中通過按鈕選擇變量的類型,點(diǎn)擊“OK”按鈕就完成了增加成員變量的操作。 增加成員變量就是在類中增加了一個成員變量,與手工增加過程完全一樣,并不省事。 (2)增加成員函數(shù) 在圖2-10所示的工作區(qū)中,在需要增加成員函數(shù)的類上單擊鼠標(biāo)右鍵,在彈出的選擇菜單上選擇運(yùn)行“Add Member Function”(增加成員函數(shù))菜單項(xiàng),就會進(jìn)入圖2-15所
27、示的對話框。,.,成員函數(shù)的增加方法與成員變量類似。不同的是,除了需要給定函數(shù)的返回類型、函數(shù)名稱、函數(shù)的類型,VS版,.,外,還可以通過選擇“Static”(靜態(tài)的)或“Virtual”(虛的)選擇框?qū)⒑瘮?shù)定義成靜態(tài)或虛函數(shù)。增加函數(shù)操作完畢后,會在類中增加成員函數(shù)的定義,在類的實(shí)現(xiàn)文件中增加一個空函數(shù)。 (3)重載虛函數(shù) 如果一個類是由MFC類派生的,那么可以在這個類中重載MFC類中的虛函數(shù)。在圖2-11所示的ClassView工作區(qū)中,在MFC派生類上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇運(yùn)行“Add Virtual Function”(增加虛函數(shù))菜單項(xiàng),就會進(jìn)入重載虛函數(shù)的對話框。圖2
28、-16所示的對話框中列出的是CDrawDoc類(其基類是,.,CDocument)中所能重載的虛函數(shù)和已經(jīng)重載的虛函數(shù)的列表。在左邊的列表框中選擇要重載的虛函數(shù),點(diǎn)擊“Add Handler”(增加)、“Add and Edit”(增加并馬上進(jìn)行編輯)按鈕,就可以在當(dāng)前文檔類CDrawDoc中重載這個虛函數(shù)。此功能與ClassWizard中的重載虛函數(shù)的功能類似(見2.5.5小節(jié))。,重載虛函數(shù),.,2.3 使用ResourceView,ResourceView及其相應(yīng)工具AppStudio是VC+對當(dāng)前應(yīng)用程序的資源進(jìn)行可視化管理的工具,利用它可以對程序所用的各種資源(菜單、工具條、對話框、
29、位圖、圖標(biāo)、加速鍵、熱鍵等)進(jìn)行可視化的管理。ResourceView的工作基礎(chǔ)是資源文件(.rc)、資源ID號定義文件(Resource.h)和一些實(shí)際的資源。在2.1.2小節(jié)生成的應(yīng)用程序Draw中,資源文件是draw.rc,資源ID號定義文件是resource.h,res目錄下的圖像、圖標(biāo)文件等是draw.rc需要的一些具體資源。另外,在res目錄下,,.,有一個draw.rc2文件,這個文件是用來手工定義資源用的,ResourceView工作時并不處理這個文件,所以在這個文件中定義的資源在可視化的編輯界面上并不存在。而程序進(jìn)行編譯時,這個資源文件中的內(nèi)容被插入到資源文件draw.rc中
30、(在資源文件draw.rc中找到一句代碼#include “resdraw.rc2”)。,.,2.3.1 ResourceView的調(diào)用 在VC+工作區(qū)下單擊“ResourceView”標(biāo)簽,就會進(jìn)入到圖2-17所示的資源管理狀態(tài)。,.,2.3.2 ResourceView工作分析 本節(jié)并不打算討論對各種資源進(jìn)行可視編輯的具體操作步驟,而只是分析利用ResourceView對資源進(jìn)行可視化管理時的工作過程。 (1)資源的幾個要素 VC+的應(yīng)用程序中下包含了開發(fā)Windows應(yīng)用程序的各種資源,如菜單、對話框、對話框內(nèi)的各種控制等等,不論哪一種資源,一般都包含以下幾個基本要素: 類別 即這個資源
31、項(xiàng)屬于哪一類資源。,.,位置和內(nèi)容 這一項(xiàng)對于不同的資源是不一樣的,主要用來表示資源項(xiàng)的位置、顯示內(nèi)容等。 風(fēng)格 此參數(shù)表示這個資源具有這類資源的哪些風(fēng)格,以及具有哪些可選參數(shù)。 ID號 標(biāo)識資源項(xiàng)的特征號,也就是這個資源的識別號。在程序運(yùn)行時,就是通過這個ID號標(biāo)識這個資源,對資源進(jìn)行操作,也是通過這個ID號標(biāo)識資源發(fā)出的消息。對于資源的ID號,需要給它定義一個ID值,ID值是在文件resource.h中定義的。 各種資源在資源文件中(如應(yīng)用程序Draw的draw.rc文件)是以文本形式來描述的。可以在資源文件draw.rc中找到應(yīng)用程序Draw的菜單資源定義:,.,IDR_MAINFRAM
32、E MENU BEGIN POPUP 文件( /單擊鼠標(biāo)左鍵調(diào)用 /AFX_MSG DECLARE_MESSAGE_MAP() . 其次,在CDrawView類的實(shí)現(xiàn)文件drawview.cpp中,加入函數(shù)的實(shí)現(xiàn)代碼: afx_msg void OnLButtonDown(UINT nFlags, CPoint point); /單擊鼠標(biāo)左鍵調(diào)用,.,其次,在CDrawView類的實(shí)現(xiàn)文件drawview.cpp中,加入函數(shù)的實(shí)現(xiàn)代碼: void CDrawView:OnLButtonDown(UINT nFlags, CPoint point) CView:OnLButtonDown(nFl
33、ags, point); 最后,在實(shí)現(xiàn)文件drawview.cpp中,加入函數(shù)的消息映射機(jī)制: BEGIN_MESSAGE_MAP(CDrawView, CView) /AFX_MSG_MAP(CDrawView) ./省略以上代碼 ON_WM_LBUTTONDOWN() /單擊鼠標(biāo)左鍵,OnLButtonDown函數(shù)的消息映射 /AFX_MSG_MAP END_MESSAGE_MAP(),.,(2)命令消息處理函數(shù) 對于一個命令交互對象,一般有兩種類型的命令消息;一種是WM_COMMAND命令消息,這種消息是在執(zhí)行命令交互對象時發(fā)出的,如果一個命令交互對象沒有對應(yīng)的消息處理函數(shù),那么這個命令
34、交互對象就處于失效而不能執(zhí)行的狀態(tài);還有另外一種ON_UPDATE_COMMAND_UI命令消息,這種消息是在更新一個命令交互對象的外觀前發(fā)出的,一般通過對這個消息的處理,來達(dá)到對這個命令交互對象顯示狀態(tài)的控制(如失效、激活、加檢查標(biāo)志等)。在應(yīng)用程序Draw的資源中增加了一個包含菜單項(xiàng)“繪制直線”的菜單“圖形繪制”(如圖2-18所示,菜單“繪制直線”的ID號為ID_DRAW_LINE),用手,.,工在CDrawView類中增加兩種類型的消息處理函數(shù)的過程如下: 首先,在CDrawView類中加入函數(shù)的定義代碼: protected: /AFX_MSG(CDrawView) ./省略以上代碼
35、afx_msg void OnDrawLine(); /繪制直線 afx_msg void OnUpdateLine(CCmdUI* pCmdUI); /是否能夠執(zhí)行“繪制直線”菜單項(xiàng) /AFX_MSG 與窗口消息不同,命令消息處理函數(shù)是新創(chuàng)建的,可以創(chuàng)建成任何符合命名規(guī)則的名稱。然后,在實(shí)現(xiàn)文件Drawview.cpp中加入函數(shù)的實(shí)現(xiàn)代碼:,.,void CDrawView:OnDrawLine() /加入實(shí)際的處理代碼 void CDrawView:OnUpdateLine(CCmdUI* pCmdUI) /加入實(shí)際處理代碼 最后,在實(shí)際文件drawview.cpp中,加入函數(shù)的消息映射機(jī)
36、制: BEGIN_MESSAGE_MAP(CDrawView, CView) /AFX_MSG_MAP(CDrawView) ./省略以上代碼,.,ON_COMMAND(ID_DRAW_LINE, OnDrawLine) /開始直線繪制 ON_UPDATE_COMMAND_UI(ID_DRAW_LINE, OnUpdateLine) /AFX_MSG_MAP END_MESSAGE_MAP() (3)控制消息處理函數(shù) 控制消息與命令消息類似,與命令消息不同的是,根據(jù)控制的不同,所激發(fā)的消息種類和數(shù)量也不一樣,如對于Button控制來說,有BN_CLICKED(鼠標(biāo)單擊按鈕時發(fā)生)、BN_DOU
37、BLECLICKED(鼠標(biāo)雙擊按鈕時發(fā)生)等消息;對于Edit控制來說,有各種諸如EN_的消息。對于不同的消息 ,可以,.,增加不同的消息處理函數(shù)。手工增加控制消息處理函數(shù)的方法與命令消息類似。,.,2.5.3 ClassWizard的作用和啟動 (1)ClassWizard的作用 在2.5.2小節(jié)中,討論了消息處理函數(shù)及手工增加的方法,讀者會發(fā)現(xiàn),增加一個消息處理函數(shù),方法雖然簡單,但實(shí)行起來有困難,此困難主要表現(xiàn)在以下兩個方面: 很難記清某個類能夠得到的消息。因?yàn)橄⒌臄?shù)量非常多,即使對于熟練編程者也不能完全記清,要花費(fèi)大量的時間查閱資料。 增加過程麻煩。對于各種窗口消息,如果不查資料就不
38、知道其保護(hù)的消息處理函數(shù)是什么,即使知道,增加起來也比較麻煩。增加一個消息處理函數(shù)需要三個步驟(定義、實(shí)現(xiàn)函數(shù)、消息映射)。另外,各種保護(hù)過的消息,.,處理函數(shù)名稱的繁瑣,以及各種映射機(jī)制的多樣性等,都使開發(fā)者不能輕松地增加一個消息處理函數(shù)。 ClassWizard是微軟公司的設(shè)計(jì)者們?yōu)榻鉀Q這個問題而設(shè)計(jì)的,是一個非常好的輔助設(shè)計(jì)工具,使你輕松地完成對消息處理函數(shù)、虛函數(shù)、映射變量、自動化變量以及ActiveX事件等的管理工作。 (2)ClassWizard的啟動 ClassWizard的啟動方式有多種,以下是兩種常用的方法:一是運(yùn)行VC+開發(fā)平臺中“View”菜單下的“Class Wizar
39、d”菜單項(xiàng),或者單擊快捷鍵CTRL_W;二是在VC+工作區(qū)的文件編輯窗口(當(dāng)窗口中打開屬于當(dāng)前程序項(xiàng)目的源文件時)中單擊鼠標(biāo)右鍵,選擇運(yùn)行彈出的快捷菜單中的菜單項(xiàng)“ClassWizard”。 不論用哪種方法啟動ClassWizard,系統(tǒng)都會進(jìn)入圖2-21,.,所示的對話框。對話框的頂部有五個選擇標(biāo)簽“Message Maps”(消息映射)、“Member Variables”(成員變量)、“Automation”(自動化)、“ActiveX Events”(ActiveX事件)和“Class Info”(類信息),選擇不同的標(biāo)簽,會出現(xiàn)不同的對話框操作界面,圖2-21所示的對話框是在選擇“M
40、essage Maps”標(biāo)簽后得到。在五個不同標(biāo)簽對應(yīng)的操作界面中,都有“Project”和“ClassName”兩個列表選擇框,從“Project”列表選擇框中選擇ClassWizard要管理的程序項(xiàng)目(一般情況下,一個工作區(qū)上只有一個程序項(xiàng)目,2.7節(jié)將討論在一個開發(fā)平臺上管理多個程序項(xiàng)目的方法)。在“ClassName”列表選擇框內(nèi)列出的是在選定程序(如“Draw”)中符合ClassWizard工作條件的類。并不是程序項(xiàng)目中的所,.,有類都在這個列表選擇框中列出,列出的只是那些包含消息處理函數(shù)、映射變量、ActiveX事件等標(biāo)識代碼的類。,.,2.5.4 ClassWizard管理消息處
41、理函數(shù) 以下對ClassWizard管理消息處理函數(shù)的功能操作進(jìn)行介紹。在ClassWizard對話框中選擇“Message Maps”標(biāo)簽,會進(jìn)入圖2-21所示的對話框,在這個對話框界面中可以對類的消息處理函數(shù)進(jìn)行管理。 (1)管理窗口消息處理函數(shù) 窗口消息包括由WM_開頭的消息(除WM_COMMAND消息外),一般由窗口對象處理。窗口對象是指從CWnd中派生的類的對象,如CWnd、CFrameWnd、CMDIFrameWnd、CMDIChildWnd、Cview、Cdialog等MFC類都是直接或間接由MFC派生而來的,能夠接受窗口消息并加入對應(yīng)的消息處理函數(shù)。,.,增加一個窗口消息處理函
42、數(shù) 以應(yīng)用程序Draw為例,說明用ClassWizard增加一個窗口消息處理函數(shù)的過程。在VC+工作界面下打開Draw項(xiàng)目,啟動ClassWizard,進(jìn)入到圖2-21所示的對話框界面。從“Class Name”復(fù)合框中選擇視圖類CDrawView,這樣在“Object IDs”列表框中就會列出各種消息來源的組件,從“Object IDs”列表框中選擇CDrawView,在列表框“Messages”中列出的就是CDrawView類對象能夠從CWnd接受到的窗口消息和各種可重載的虛函數(shù)。從中可以找到一個名為WM_LBUTTONDOWN的消息,用鼠標(biāo)選中這個消息。此時,“Add Function”
43、(增加函數(shù))按鈕處于可執(zhí)行狀態(tài),點(diǎn)擊此按鈕,就會在CDrawView類中增加一個被CWnd保護(hù)的消息處理函數(shù)OnLButtonDown。在“,.,“Member functions”(成員函數(shù))列表框中能夠發(fā)現(xiàn)OnLButtonDown函數(shù)及其對應(yīng)的消息映射機(jī)制“OnLButtonDown ON_WM_LBUTTONDOWN”,在函數(shù)前有一個W標(biāo)志,表示這個函數(shù)是一個窗口消息處理函數(shù)。 增加窗口消息處理函數(shù)過程的分析 以上討論的用ClassWizard增加窗口消息處理函數(shù)的過程,實(shí)際上是完成了本章2.5.2小節(jié)中用手工增加窗口消息處理函數(shù)的過程。對于應(yīng)用程序Draw的代碼,做了如下修改: 在視
44、圖類CDrawView中,增加了消息處理函數(shù)的定義代碼: /AFX_MSG(CDrawView) afx_msg void OnLButtonDown(UINT nFlags, CPoint point); /AFX_MSG,.,在CDrawView類的實(shí)現(xiàn)文件drawview.cpp中,增加了函數(shù)的實(shí)際代碼: void CDrawView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default CView:OnLButtonDown(nFla
45、gs, point); 在實(shí)現(xiàn)文件drawview.cpp中,增加了函數(shù)的消息映射機(jī)制。在實(shí)現(xiàn)文件drawview.cpp中,可以找到增加的消息映射機(jī)制: BEGIN_MESSAGE_MAP(CDrawView, CView) /AFX_MSG_MAP(CDrawView) ON_WM_LBUTTONDOWN() /單擊鼠標(biāo)左鍵,OnLButtonDown函數(shù)的消息映射 /AFX_MSG_MAP / Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint) ON_COMMAND(ID_FILE_PRINT_D
46、IRECT, CView:OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview) END_MESSAGE_MAP(),.,ClassWizard識別和處理窗口消息處理函數(shù)所需要的標(biāo)識 ClassWizard通過固定的代碼來識別窗口消息處理函數(shù),通過以下兩行代碼來標(biāo)識消息處理函數(shù)的定義: /AFX_MSG(CDrawView) /ClassWizard標(biāo)識消息處理函數(shù)定義的起始代碼 /AFX_MSG /ClassWizard標(biāo)識消息處理函數(shù)定義的結(jié)束代碼 第一行代碼括號中的內(nèi)容(CDrawView)是消息處
47、理函數(shù)所在類的名稱,只有將消息處理函數(shù)定義在以上代碼間時,才能被ClassWizard識別和處理。消息處理函數(shù)與普通函數(shù)的定義格式略有不同,需要在函數(shù)定義前加標(biāo)識符afx_msg。 在實(shí)現(xiàn)文件中,消息映射機(jī)制寫在如下的兩行代碼間而被ClassWizard識別: /AFX_MSG_MAP(CDrawView) /ClassWizard標(biāo)識消息處理函數(shù)映,.,射機(jī)制的起始代碼 /AFX_MSG_MAP /ClassWizard標(biāo)識消息處理函數(shù)映射機(jī)制的結(jié)束代碼 同樣,第一行代碼括號中的內(nèi)容是擁有消息映射機(jī)制的類的名稱,只有當(dāng)一個消息處理函數(shù)的消息映射機(jī)制寫在以上兩行代碼間時,才能被ClassWiz
48、ard識別和處理。 刪除窗口消息處理函數(shù) 用ClassWizard刪除窗口消息處理函數(shù)的方法很簡單。在圖2-21所示的操作界面中,從“Member Functions”列表框中選擇剛剛增加的OnLButtonDown函數(shù),“Delete Function”按鈕處于激活可執(zhí)行狀態(tài),點(diǎn)擊此按鈕,系統(tǒng)會提示是否對OnLButtonDown函數(shù)進(jìn)行刪除,并提示必須用手工從實(shí)現(xiàn)文件中刪除函數(shù)的,.,實(shí)際代碼,確認(rèn)后就刪除了這個消息處理函數(shù)。 以上操作只是從視圖類CDrawView中刪除了函數(shù)的定義代碼,從實(shí)現(xiàn)文件中刪除了映射消息機(jī)制,而對于實(shí)現(xiàn)文件中的函數(shù)實(shí)現(xiàn)代碼,需要手工進(jìn)行刪除。這樣做的目的是避免誤
49、操作而刪除大量有用的代碼。 (2)管理命令消息處理函數(shù) 以上討論了利用ClassWizard管理窗口消息處理函數(shù)的方法,現(xiàn)在討論利用ClassWizard管理命令消息處理函數(shù)的方法。,一個類只有在頭文件和實(shí)現(xiàn)文件中的識別符正確存在時,ClassWizard才能對這個類的窗口消息處理函數(shù)進(jìn)行管理。只有這個類的窗口消息處理函數(shù)的定義和消息映射機(jī)制都寫在識別符以內(nèi)時,ClassWizard才能識別和處理這個消息處理函數(shù)。,.,在2.5.1小節(jié),對命令消息進(jìn)行了簡述,與窗口消息不同,命令消息可以在程序框架中的多個類對象中按一定的順序傳遞,直到找到對應(yīng)的消息處理函數(shù)為止。反映到消息處理函數(shù)上,就是可以在
50、屬于框架的各個類中創(chuàng)建消息處理函數(shù)。如,在應(yīng)用程序Draw中加入了一個“圖形繪制”菜單,其中有一個“繪制直線”菜單項(xiàng),對于這個菜單項(xiàng)的消息處理函數(shù),可以在文檔、視圖、框架、應(yīng)用等多個類中創(chuàng)建。如果在多于一個類中創(chuàng)建了同一個命令消息的處理函數(shù),則只有先得到命令消息的對象中的消息處理函數(shù)才能夠被運(yùn)行。 增加命令消息處理函數(shù) 用ClassWizard增加命令消息處理函數(shù)的操作方法,與增加窗口消息處理函數(shù)類似,下面舉例介紹操作過程。,.,在應(yīng)用程序Draw的菜單資源IDR_DRAWTYPE中增加了一個菜單項(xiàng)“繪制直線”(ID號為ID_DRAW_LINE),用ClassWizard在類CDrawView
51、中增加消息映射函數(shù)的步驟如下: 進(jìn)入ClassWizard,在“Class Name”列表框中選擇CDrawView類,在“Object Ids”列表框中選中“繪制直線”菜單項(xiàng)的ID號ID_DRAW_LINE。此時,在Messages列表框中有兩個消息可供選擇:COMMAND和UPDATE_COMMAND_UI。選擇COMMAND消息,單擊“Add Function”按鈕,與增加窗口消息處理函數(shù)時不同,會出現(xiàn)一個對話框要求輸入消息處理函數(shù)的名稱(因?yàn)槊钕⑻幚砗瘮?shù)不像窗口消息具有已被保護(hù)的處理函數(shù))。如果接受默認(rèn)的處理函數(shù),.,名稱OnDrawLine,就會在CDrawView類中增加一個命
52、令消息處理函數(shù)OnDrawLine。用同樣的方法可以在CDrawView類中增加一個UPDATE_COMMAND_UI消息的處理函數(shù)OnUpdateCommandUI。點(diǎn)擊“OK”按鈕退出對話框,就完成了增加命令消息處理函數(shù)的操作。以上操作,在相應(yīng)的源文件中對程序代碼進(jìn)行了如下修改: 在視圖類CDrawView中,增加了消息處理函數(shù)的定義代碼: /AFX_MSG(CDrawView) /省略以上代碼 afx_msg void OnDrawLine(); afx_msg void OnUpdateDrawLine(CCmdUI* pCmdUI); /AFX_MSG DECLARE_MESSAGE
53、_MAP(),OnUpdateDrawLine,.,在類CDrawView的實(shí)現(xiàn)文件drawview.cpp中,增加了函數(shù)的實(shí)現(xiàn)代碼: void CDrawView:OnDrawLine() / TODO: Add your command handler code here void CDrawView:OnUpdateDrawLine(CCmdUI* pCmdUI) / TODO: Add your command update UI handler code here 在實(shí)現(xiàn)文件drawview.cpp中,增加了消息映射: BEGIN_MESSAGE_MAP(CDrawView, CVi
54、ew) /AFX_MSG_MAP(CDrawView) ON_WM_LBUTTONDOWN() ON_COMMAND(ID_DRAW_LINE, OnDrawLine) ON_UPDATE_COMMAND_UI(ID_DRAW_LINE, OnUpdateDrawLine) /AFX_MSG_MAP / Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint) ON_COMMAND(ID_FILE_PRIN
55、T_PREVIEW, CView:OnFilePrintPreview) END_MESSAGE_MAP(),.,ClassWizard對于命令消息處理函數(shù)的識別標(biāo)識,與窗口消息處理函數(shù)一樣,在此不再多述。 (3)管理控制消息處理函數(shù) 控制消息處理函數(shù)是對應(yīng)于VC+中各種控制消息的處理函數(shù),多數(shù)存在于基于對話框的類中,對話框中存在著用戶創(chuàng)建的很多控制(如編輯框、列表框、復(fù)合框、滾動條等),這些控制在建立或被操作時會產(chǎn)生各種不同的控制消息。ClassWizard能夠?qū)@些控制消息的處理函數(shù)實(shí)行管理,ClassWizard管理控制消息處理函數(shù)的操作方法與管理命令消息時是相同的。,.,2.5.5 C
56、lassWizard管理重載虛函數(shù) MFC框架程序中具有很多標(biāo)準(zhǔn)操作功能。例如,運(yùn)行應(yīng)用程序Draw“文件”菜單下的“打開”菜單項(xiàng)時,就會彈出文件選擇對話框選擇需要打開的文檔名稱,然后進(jìn)行文檔的打開工作。以上這個操作過程在MFC中實(shí)現(xiàn),它是由一系列函數(shù)組成的。為了讓程序開發(fā)者能夠?qū)@個過程進(jìn)行修改和控制,在以上這個操作過程中,應(yīng)用了很多虛函數(shù),在應(yīng)用程序的當(dāng)前類中,可以對基類中的這些虛函數(shù)進(jìn)行重載,通過多態(tài)性而使MFC實(shí)現(xiàn)的標(biāo)準(zhǔn)操作過程執(zhí)行當(dāng)前類中的虛函數(shù),從而達(dá)到控制和修改MFC中已經(jīng)實(shí)現(xiàn)的標(biāo)準(zhǔn)操作過程的目的。MFC ClassWizard可以用來管理這些可以被重載的虛函數(shù)。,.,(1)管理
57、重載虛函數(shù) 例如,要在類CDrawDoc中重載一個虛函數(shù)OnOpenDocument。這個虛函數(shù)在打開文檔操作時被MFC程序框架調(diào)用,通常是作為FileOpen命令操作的一部分。默認(rèn)情況下,這個虛函數(shù)用來打開指定的文件,調(diào)用DeleteContents虛函數(shù)清空文檔,調(diào)用虛函數(shù)Serialize讀取文件的內(nèi)容。現(xiàn)在用ClassWizard在當(dāng)前文檔類CDrawDoc中重載這個虛函數(shù)。 進(jìn)入圖2-21所示的ClassWizard操作界面,在“Class Name”列表框中選擇類CDrawDoc,在“Object IDs”列表框中選擇CDrawDoc項(xiàng),在“Message”列表框中列出的是類能夠得
58、到的各種窗口消息和可重載的虛函數(shù)。再從“Message”列表框中選擇虛函數(shù)OnOpenDocument,單擊“Add Function”按鈕,點(diǎn),.,擊“OK”按鈕退出對話框,ClassWizard就會在CDrawDoc類中重載了虛函數(shù)OnOpenDocument。這個操作過程對程序代碼做了如下修改: 在文檔類CDrawDoc中,增加了函數(shù)的重載定義: /AFX_VIRTUAL(CDrawDoc) public: virtual BOOL OnNewDocument(); virtual void Serialize(CArchive ,.,這個函數(shù)的第一行代碼CDocument:OnOpen
59、Document(lpszPathName),調(diào)用了基類CDocument的OnOpenDocument函數(shù),完成與不重載時相同的操作。可以在當(dāng)前文檔類的OnOpenDocument函數(shù)中加入代碼,完成需要的操作功能。如下改動后的OnOpenDocument函數(shù),能夠在進(jìn)行打開文檔文件操作的同時,打開一個與當(dāng)前文件名稱相同、而后綴不同的文件,作為應(yīng)用程序Draw運(yùn)行時的臨時文件。 BOOL CDrawDoc:OnOpenDocument(LPCTSTR lpszPathName) if (!CDocument:OnOpenDocument(lpszPathName) return FALSE; FilePath = lpszPathName; /得到當(dāng)前文檔的名稱 int n = FilePath.Find(.); /得到文件名中.的位置 if(n0) /如果當(dāng)前的文檔名稱有后綴,去掉后綴 FileName = FilePath.Left(n); else FileName = FilePath;,.,FileNam
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 城市醫(yī)療集團(tuán)制度規(guī)范
- 卸貨平臺規(guī)范管理制度
- 公路檢測公司制度規(guī)范
- 綜合指揮室制度工作規(guī)范
- 規(guī)范基金會日常管理制度
- 小學(xué)廚藝教室制度規(guī)范
- 大型設(shè)備防腐制度規(guī)范
- 全科醫(yī)生上班制度規(guī)范
- 居規(guī)民約等制度或規(guī)范
- 保健食品配方規(guī)范制度
- 口腔科耗材成本精細(xì)化管控技巧
- 常德職業(yè)技術(shù)學(xué)院單招《語文》考試復(fù)習(xí)題庫(含答案)
- 地產(chǎn)住宅項(xiàng)目精裝修施工圖審圖要點(diǎn)
- 2026年中考數(shù)學(xué)解密之尺規(guī)作圖
- 保潔5S管理課件
- 子宮內(nèi)膜癌課件
- 2025年高考廣東卷物理真題(原卷版)
- 流域排澇泵站建設(shè)工程可行性研究報(bào)告
- 國企后勤管理制度匯編
- 電動兩輪車整車性能測試與優(yōu)化方案
- 《藝術(shù)插花的造型與數(shù)學(xué)》教學(xué)大綱
評論
0/150
提交評論