• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            MFC
            ?
            前面我們利用AppWizard創(chuàng)建了一個應(yīng)用程序框架,它除了顯示一個Windows的多文檔界面以外,目前還沒有任何實際的用處,我們必須為它添加實際的功能。事實上,大多數(shù)Visual C++程序員都是在這個應(yīng)用程序框架的基礎(chǔ)上從事添加各種功能模塊的工作,包括設(shè)計自己的類,編寫具有一定功能的成員函數(shù)。
            Visual C++的集成開發(fā)環(huán)境向用戶提供了一個功能很強的操作類的工具—ClassWizard,我們可以利用該工具非常方便地向應(yīng)用程序中添加類、向類中添加消息處理函數(shù)、成員函數(shù)、以及添加成員變量等。利用ClassWizard,我們再也不用手工編寫那些繁瑣的代碼,只需使用簡單的鼠標和鍵盤操作就能夠完成大量的工作,相當(dāng)于用機器制造機器。
            一 ClassWizard簡介
            從字面上看,Class是類的意思,而Wizard則是“智者”的意思,兩者合起來,ClassWizard的意思就是智能地操作類的工具。
            在Visual C++ 6.0的集成開發(fā)環(huán)境中,ClassWizard最能體現(xiàn)它的特征。與AppWizard類似,ClassWizard也能自動生成程序代碼,只是兩者生成的對象不同,AppWizard主要用來創(chuàng)建應(yīng)用程序的框架,而ClassWizard則主要是在應(yīng)用程序框架的基礎(chǔ)上創(chuàng)建和編輯各種類。
            ClassWizard既可以操作由AppWizard在應(yīng)用程序框架中創(chuàng)建的類,又可以操作后來由ClassWizard自己添加的類。利用ClassWizard可以很輕松地完成一些最基本、最普通的工作,如在自己的應(yīng)用程序中創(chuàng)建新類、映射消息為其添加消息處理函數(shù)、覆蓋虛擬函數(shù)、將對話框中的控件與某個變量相關(guān)聯(lián)等。
            ClassWizard只能用于使用MFC類庫的應(yīng)用程序中。
            ClassWizard可以完成的主要功能如下:
            ◆ 創(chuàng)建新類。這是ClassWizard最基本的用途之一。創(chuàng)建的新類由一些主要的基類派生而來,這些基類用于處理Windows的消息,對一般用戶來說,這些基類已經(jīng)足夠了。
            ◆ 進行消息映射。這些消息主要和窗口、菜單、工具欄、對話框、控件以及加速鍵相關(guān)聯(lián)。
            ◆ 添加成員變量。利用ClassWizard,可以很方便地向類中添加成員變量,并將這些成員變量與對話框或窗口中的控件關(guān)聯(lián)起來,當(dāng)控件的值改變時,所對應(yīng)的成員變量的值也跟著發(fā)生變化。
            ◆ 覆蓋虛擬函數(shù)。使用ClassWizard可以方便地覆蓋基類中定義的虛擬函數(shù)。
            二 ClassWizard操作說明
            在剛進入Visual C++ 集成開發(fā)環(huán)境時,菜單項View|ClassWizard是灰化禁止的,只有在打開一個工作區(qū)文件后,該菜單項才能正常顯示,表明該選項是可用的。
            首先打開以前創(chuàng)建的多文檔應(yīng)用程序FirstApp,再選擇菜單項View|ClassWizard,即可啟動ClassWizard,進入ClassWizard環(huán)境,ClassWizard是一個對話框,其中包含五個選項卡,分別為:Message Maps、Member Variables、Automation、ActiveX Events、以及Class Info。它們針對不同的對象完成不同的任務(wù)。
            1. Message Maps選項卡
            它是ClassWizard對話框中最重要的選項卡,主要完成創(chuàng)建新類、添加、刪除消息處理函數(shù)等任務(wù)。
            該選項卡中包含了兩個下拉列表框:Project下拉列表框和Class name下拉列表框;三個列表框:Object IDs列表框、Message列表框和Member functions列表框;一個文本信息框;四個工具按鈕。
            ★ Project下拉列表框:該下拉列表框用于選擇當(dāng)前操作的項目。當(dāng)當(dāng)前打開的工作區(qū)中包含多個項目文件時,用戶可以從這個下拉列表框中選擇將要操作的項目文件。對于單項目工作區(qū)來說,其默認值就是項目文件。
            ★ Class name下拉列表框:該下拉列表框用于選擇當(dāng)前要操作的類。當(dāng)用戶在Class name下拉列表框中選中了某個類之后,Object IDs窗口中的內(nèi)容將會發(fā)生相應(yīng)的變化。
            ★ Object IDs列表框:該列表框用于顯示當(dāng)前選定類中能夠產(chǎn)生消息的對象的ID值。這些對象包括菜單選項、工具欄按鈕選項、對話框以及各種控件等。
            通常Object IDs列表框中所包含的第一個對象就是當(dāng)前類名。
            ★ Message列表框:Message列表框中列出了對應(yīng)于Object IDs列表框中所選中的當(dāng)前項可以處理的消息以及可被重寫的MFC虛函數(shù)。當(dāng)Object IDs列表框中選定當(dāng)前類名時,Message列表框前部分顯示的是當(dāng)前類所能覆蓋的虛擬函數(shù),后部分顯示的是能夠處理的消息。如Object IDs列表框中選定其它對象,則Message列表框顯示的就是當(dāng)前項可以處理的消息。
            ★ Member functions列表框:Member functions列表框中列出了在Class name下拉列表框中所選中的當(dāng)前類包含的所有成員函數(shù)。其中用字母“V”標出的是MFC虛函數(shù),用字母“W” 標出的是Windows消息處理函數(shù)。
            ★ 文本信息框:在Project下拉列表框的下方有一個文本信息框,用于顯示當(dāng)前選中類的源文件,包括.h文件和.cpp文件。該文本信息框中顯示的內(nèi)容會隨著選定類的變化而變化。
            ★ Add Class按鈕:該按鈕用于向當(dāng)前的Project中添加一個新類,新類可以是自己創(chuàng)建,也可以是從已有的文件中選取。
            ★ Add Function按鈕:該按鈕用于向當(dāng)前選定類中為當(dāng)前選定的消息添加一個消息處理函數(shù)。其中類是在Class name下拉列表框中選定的類;而當(dāng)前消息則是在Message列表框中選定的消息。
            Add Function按鈕平時是灰化禁止的,只有當(dāng)用戶在Message列表框中選中某個特定的消息之后,該按鈕才能正常顯示,即此時才能使用。
            ★ Delete Function按鈕:該按鈕用于在當(dāng)前選定的類中刪除已有的成員函數(shù)。Delete Function按鈕平時是灰化禁止的,只有當(dāng)用戶在Member functions列表框中選中某個消息處理函數(shù)之后,才能選擇該按鈕。
            ★ Edit Code按鈕:單擊該按鈕將打開編輯窗口,并將光標位置自動跳到當(dāng)前選定的成員函數(shù)的源代碼處。
            2. Member Variables選項卡
            該選項卡主要用于添加與對話框中的控件相關(guān)聯(lián)的成員變量,以便程序能利用這些成員變量與對話框中的控件進行數(shù)據(jù)交換。該選項卡與Message Maps選項卡一樣,也包含Project下拉列表框和Class name下拉列表框,分別用于選定用戶操作的當(dāng)前項目和當(dāng)前類;Add Class按鈕用于向當(dāng)前項目中添加一個新類;一個文本信息框,用于顯示當(dāng)前選中類的源文件。
            此外,Member Variables選項卡中還包含另一個列表框以及另外四個工具按鈕。列表框中共有3列數(shù)據(jù),分別為:
            ★ Control IDs:該項顯示了當(dāng)前選定類中能夠映射成員變量的控件的ID值。所謂能映射成員變量的控件,就是可以使用類中的成員變量來代表某個控件,當(dāng)控件發(fā)生改變時,該成員變量的值也發(fā)生相應(yīng)變化。
            ★ Type:該項表示成員變量的類型。
            ★ Member:該項表示成員變量的名字。
            注意:并不是所有的類都有這些信息,只有在選擇了對話框類、有格式視圖類或記錄視圖類時才能顯示出這些信息。
            ★ Add Variable按鈕:該按鈕用于為當(dāng)前選定的控件添加一個成員變量。
            ★ Delete Variable按鈕:該按鈕用于刪除一個現(xiàn)有的成員變量。該按鈕平時是灰化禁止的,只有當(dāng)用戶在Control IDs列表框中選中某個成員變量以后,才能選擇該按鈕執(zhí)行刪除工作。
            ★ Update Columns按鈕:該按鈕用于選定一個數(shù)據(jù)源,只在記錄集合類中才可以使用。
            ★ Bind All按鈕:只適用于記錄集合類,單擊此按鈕將把所有未綁定的記錄集里的數(shù)據(jù)成員綁定到數(shù)據(jù)源的一個表中相應(yīng)的列上。在默認情況下,MFC AppWizard和ClassWizard將綁定所有的列,所以很少需要使用數(shù)據(jù)綁定。如果通過刪除相關(guān)的數(shù)據(jù)成員將一些或所有列取消綁定,那么在這之后還可以重新綁定它們。
            3. Automation選項卡
            該選項卡允許用戶加入方法或?qū)傩砸栽鰪夾utomation功能。
            4. ActiveX Events選項卡
            該選項卡允許用戶加入事件以支持ActiveX控件。
            5. Class Info選項卡
            該選項卡用于顯示和設(shè)置當(dāng)前選定類中的一些重要信息。

            三 使用ClassWizard創(chuàng)建新類
            使用ClassWizard最重要的作用就是創(chuàng)建新類,用戶將不必手工添加創(chuàng)建類所需的大量代碼,只需指定一些關(guān)于新類的重要信息,ClassWizard將自動為你生成這些代碼。
            下面以應(yīng)用程序FirstApp為例說明創(chuàng)建過程。步驟如下:
            (1) 首先打開FirstApp的項目工作區(qū)。
            (2) 點擊菜單項View|ClassWizard,進入ClassWizard對話框。
            (3) 在Message Maps選項卡中選擇功能按鈕Add Class,并從其下拉選項欄中單擊New選項,將會打開New Class對話框。
            (4) 首先在Name欄中鍵入新類的名稱,如FirstButton。此時我們將看到在下面的File name欄中顯示出ClassWizard自動為新類定義的默認文件名:FirstButton.cpp。如果你不想要這個名字,也可以單擊Change按鈕對文件名進行修改。
            (5) 接下來應(yīng)當(dāng)設(shè)定新類的基類,即該類是由什么類派生而來的。在Base class下拉列表框中選中所需的基類名,如CButton。
            (6) 如果你創(chuàng)建的基類需要對話框或其它資源,則應(yīng)當(dāng)在Dialog ID框中選擇一個資源ID值。
            (7) Automation組框用于設(shè)置類的自動化信息,這只適用于能夠自動化的類,即由CCmdTarget所派生的類,我們保持其默認選擇None。
            (8) 最后單擊OK按鈕結(jié)束。
            至此我們已經(jīng)成功地向項目中添加了一個新類FirstButton。
            回到Visual C++的主窗口中,我們將發(fā)現(xiàn)在FirstApp的項目工作區(qū)中發(fā)生了一些變化。打開ClassView選項卡,將看到一個新類FirstButton已經(jīng)被添加到該項目的類列表中了。同時在FirstView選項卡中將發(fā)現(xiàn)FirstApp項目中新增加了兩個文件:FirstButton.h,F(xiàn)irstButton.cpp。

            四 使用ClassWizard添加消息處理函數(shù)
            使用ClassWizard來為類添加消息處理函數(shù),用戶將不需要手工編寫消息映射所需的各種消息宏,這樣大大減輕了工作量。
            本節(jié)將以FirstApp應(yīng)用程序為例來添加消息處理函數(shù),處理用戶在視圖中的單擊鼠標操作。步驟如下:
            (1) 首先打開FirstApp的項目工作區(qū)。
            (2) 點擊菜單項View|ClassWizard,進入ClassWizard對話框。
            (3) 選擇Message Maps選項卡,在Project下拉列表框中選擇項目名FirstApp,在Class name下拉列表框中選擇類名CFirstAppView。
            (4) 在Object IDs列表框中選擇對象ID為CFirstAppView。
            (5) 在Message列表框中選擇需要處理的消息為WM_LBUTTONDOWN,即按下鼠標左鍵消息。
            (6) 此時會發(fā)現(xiàn)Add Function按鈕已經(jīng)可用。單擊此按鈕,ClassWizard將選中消息的處理函數(shù)添加到Member Functions列表框中。在本例中,對應(yīng)WM_LBUTTONDOWN消息的處理函數(shù)是OnLButtonDown()。
            (7) 最后單擊OK按鈕結(jié)束。
            注意:當(dāng)用戶為一些標準的Windows消息添加消息處理函數(shù)時,ClassWizard一般會自動地為你創(chuàng)建一個默認的消息處理函數(shù)名。而當(dāng)用戶為非標準消息添加處理函數(shù)時,ClassWizard將彈出一個對話框,并給出一個缺省的函數(shù)名,用戶可以重新命名該消息響應(yīng)函數(shù)。
            在Visual C++的主窗口中打開項目工作區(qū)的ClassView選項卡,并打開CFirstAppView類的成員列表,就會發(fā)現(xiàn)消息處理函數(shù)OnLButtonDown()已經(jīng)被添加進去了。
            同時,通過查看文件,將會看到在CFirstAppView類的頭文件FirstAppView.h中新加了消息處理函數(shù)OnLButtonDown()的聲明。
            可以看到該函數(shù)體是空的,其中只調(diào)用了一個其父類的成員函數(shù),并且ClassView為用戶生成了一些重要的注釋行,以提示用戶在何處添加自己的代碼。
            五 使用ClassWizard添加成員變量
            成員變量也是類中不可或缺的組成部分,用于保存類的信息,我們將利用ClassView來為類添加成員變量。具體步驟如下:
            (1) 首先打開FirstApp的項目工作區(qū)。
            (2) 點擊菜單項View|ClassWizard,進入ClassWizard對話框。
            (3) 在ClassWizard對話框中選擇Member Variables選項卡,在Project下拉列表框中選擇當(dāng)前項目名FirstApp,在Class name下拉列表框中選擇當(dāng)前類名CAboutDlg。此時在Controls IDs列表框中將顯示該類中包含的控件ID:“IDOK”,這個ID值對應(yīng)于About對話框中的OK按鈕。
            (4) 單擊Add Variables按鈕,將打開Add Member Variables對話框。有3個控件用來設(shè)置新成員變量的一些重要信息。
            ◆ Member variables name文本框:該文本框用來輸入新成員變量的名字,在默認情況下,ClassWizard提供“m_”這個前綴以便將這個變量確認為成員變量。
            ◆ Category下拉列表框:該下拉列表框用于指定新變量是一個“Value”類型的成員變量還是一個“Control”類型的成員變量。對于標準的Windows控件來說,選擇Value可以創(chuàng)建一個包含由用戶來輸入控件文本和控件狀態(tài)的成員變量。而當(dāng)用戶選中Control選項時,就可以創(chuàng)建一個“Control”類型的變量,我們可以對這個控件直接進行訪問。
            ◆ Variable type下拉列表框:該下拉列表框用于選擇變量的數(shù)據(jù)類型。
            (5) 在Member variables name欄中輸入變量名m_ok;在Category欄中選擇該變量的類型:copntrol類型;在Variable type欄中選擇該變量的數(shù)據(jù)類型CButton。
            (6) 單擊OK按鈕退出,這時我們可以看到,ClassWizard對話框中發(fā)生了改變。
            打開FirstApp程序的項目工作區(qū),可以看到,在CAboutDlg類的數(shù)據(jù)成員中,新增加了一個成員變量:m_ok。在CAboutDlg類的成員函數(shù)DoDataExchange()中,也添加了一條語句來映射控件ID值IDOK和成員變量m_ok:
            DDX_Control(pDX, IDOK, m_ok);
            六 使用ClassWizard覆蓋虛擬函數(shù)
            我們還可以使用ClassWizard來覆蓋基類中定義的虛擬函數(shù),方法如下:
            (1) 打開ClassWizard對話框的Message Maps選項卡。
            (2) 在Class name下拉列表框中選擇一個類名來作為當(dāng)前類。如CFirstAppView。
            (3) 在Object Ids列表框中再次選擇該類名,如CFirstAppView。此時在Message列表框中將列出所有可以覆蓋的虛擬函數(shù)名和所有可操作的Windows消息。
            (4) 在Message列表框中選擇所要覆蓋的虛擬函數(shù),如OnPaint()。
            (5) 單擊Add Function按鈕覆蓋基類的該虛擬函數(shù)。此時在Member functions列表框中將顯示虛擬函數(shù)名OnPaint()。注意在此函數(shù)前有一個“V”字母,表示該函數(shù)是一個虛擬函數(shù)。
            (6) 單擊OK按鈕結(jié)束。
            我們在頭文件FirstAppView.h中可看到該虛擬函數(shù)的定義:
            virtual void OnPaint(CDC * pDC, CPrintInfo * pInfo);
            同時在實現(xiàn)函數(shù)FirstAppView.cpp中可看到該虛擬函數(shù)的函數(shù)體:
            void CFirstAppView::OnPaint(CDC * pDC, CPrintInfo * pInfo)
            {
            //在此處加上專門代碼或調(diào)用基類
            CView::OnPaint(pDC, pInfo);
            }

            posted on 2006-11-01 17:17 哈哈 閱讀(2821) 評論(2)  編輯 收藏 引用

            評論:
            # re: MFC中的ClassWizard的使用 2008-03-19 16:17 | gege
            寫的很好  回復(fù)  更多評論
              
            # re: MFC中的ClassWizard的使用[未登錄] 2009-01-21 11:53 | Oscar
            ★ Class name下拉列表框:該下拉列表框用于選擇當(dāng)前要操作的類。當(dāng)用戶在Class name下拉列表框中選中了某個類之后,Object IDs窗口中的內(nèi)容將會發(fā)生相應(yīng)的變化。
            ★選取需要響應(yīng)消息的框架窗口類


            ★ Object IDs列表框:該列表框用于顯示當(dāng)前選定類中能夠產(chǎn)生消息的對象的ID值。這些對象包括菜單選項、工具欄按鈕選項、對話框以及各種控件等。
            ★選取此類中,哪個具體對象來響應(yīng)消息


            ★ Add Function按鈕:該按鈕用于向當(dāng)前選定類中為當(dāng)前選定的消息添加一個消息處理函數(shù)。其中類是在Class name下拉列表框中選定的類;而當(dāng)前消息則是在Message列表框中選定的消息。


            消息映射:選定捕獲消息的類及具體對象,最后添加消息處理函數(shù)Add Function  回復(fù)  更多評論
              

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            国产一区二区精品久久岳| 精品多毛少妇人妻AV免费久久| 无码人妻久久一区二区三区免费 | 亚洲国产精品无码久久一区二区| 无码八A片人妻少妇久久| 久久九九精品99国产精品| 久久国产成人精品国产成人亚洲| 中文精品99久久国产| 韩国无遮挡三级久久| 思思久久好好热精品国产| 品成人欧美大片久久国产欧美| 久久久无码精品亚洲日韩京东传媒| 久久被窝电影亚洲爽爽爽| 久久婷婷五月综合国产尤物app| 亚洲国产精品婷婷久久| 日产精品久久久久久久| 色老头网站久久网| 久久er国产精品免费观看8| 国产欧美一区二区久久| 欧美一区二区三区久久综| 2021国内久久精品| 亚洲一级Av无码毛片久久精品| 色综合久久精品中文字幕首页| 久久永久免费人妻精品下载| 亚洲伊人久久成综合人影院 | 久久免费的精品国产V∧| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 国产午夜免费高清久久影院| 精品久久亚洲中文无码| 中文字幕精品无码久久久久久3D日动漫| 99久久国产亚洲高清观看2024 | 日本亚洲色大成网站WWW久久 | 久久久久久国产a免费观看黄色大片| 亚洲国产成人久久综合碰碰动漫3d| 麻豆成人久久精品二区三区免费 | 久久99亚洲网美利坚合众国| 精品综合久久久久久98| 久久妇女高潮几次MBA| 亚洲AV无码一区东京热久久| 亚洲精品无码久久千人斩| 久久国产免费观看精品3|