VisualC++教程(下)ppt.ppt_第1頁
VisualC++教程(下)ppt.ppt_第2頁
VisualC++教程(下)ppt.ppt_第3頁
VisualC++教程(下)ppt.ppt_第4頁
VisualC++教程(下)ppt.ppt_第5頁
已閱讀5頁,還剩219頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第5章菜單 工具欄和狀態(tài)欄 5 1 1文檔應(yīng)用程序的MFC類結(jié)構(gòu) 用MFCAppWizard exe 創(chuàng)建一個(gè)默認(rèn)的單文檔應(yīng)用程序Ex SDI 將項(xiàng)目工作區(qū)窗口切換到 ClassView 類視圖 頁面 可以看到構(gòu)成Ex SDI應(yīng)用程序框架的MFC類結(jié)構(gòu) 如圖所示 再創(chuàng)建一個(gè)默認(rèn)的多文檔應(yīng)用程序Ex MDI 可以看到如圖所示的MFC類結(jié)構(gòu) 5 1 2項(xiàng)目的文件組織 VisualC 6 0中 項(xiàng)目中所有的源文件都采用文件夾的方式進(jìn)行管理的 每一個(gè)類的源代碼均保存同名的h和cpp文件 opt關(guān)于開發(fā)環(huán)境的參數(shù)文件 如工具格位置等信息 aps AppStudioFile 資源輔助文件 二進(jìn)制格式 clwClassWizard信息文件 dsp DeveloperStudioProject 項(xiàng)目文件 plg編譯信息文件 mdp MicrosoftDevStudioProject 舊版本的項(xiàng)目文件 bsc用于瀏覽項(xiàng)目信息 map執(zhí)行文件的映像信息紀(jì)錄文件 pch Pre CompiledFile 預(yù)編譯文件 可以加快編譯速度 但是文件非常大 pdb ProgramDatabase 記錄程序有關(guān)的一些數(shù)據(jù)和調(diào)試信息 ncb無編譯瀏覽文件 nocompilebrowser 5 1 2項(xiàng)目的文件組織 還有相應(yīng)的Debug 調(diào)試 Res 資源 等子文件夾 程序項(xiàng)目Win32Release版本 它與Release的區(qū)別在于 Debug版本的運(yùn)行程序有相應(yīng)的調(diào)試信息碼 而Release版本的運(yùn)行程序沒有 但Release版本的運(yùn)行程序經(jīng)過代碼的優(yōu)化 其程序的運(yùn)行效率被最大提升 通過選擇 編譯 放置可遠(yuǎn)行配置 菜單命令 在圖所示的對(duì)話框中 選擇 Ex SDI Win32Release 然后單擊 確定 按鈕 編譯后即可 5 2菜單 Windows程序都有各自的菜單 為了使Windows程序更容易操作 許多程序員對(duì)于菜單的設(shè)計(jì)都遵循下列一些規(guī)則 若選擇某菜單項(xiàng)會(huì)彈出一對(duì)話框 那么在該菜單項(xiàng)文本后有 2 若某項(xiàng)菜單有子菜單 那么在該菜單項(xiàng)文本后有 3 若菜單項(xiàng)需要助記符 則用括號(hào)將帶下劃線的字母括起來 助記符與Alt構(gòu)成一個(gè)組合鍵 當(dāng)按住 Alt 鍵不放 再敲擊 4 該字母時(shí) 對(duì)應(yīng)的菜單項(xiàng)就會(huì)被選中 4 若某項(xiàng)菜單需要快捷鍵的支持 則一般將其列在相應(yīng)菜單項(xiàng)文本之后 所謂 快捷鍵 是一個(gè)組合鍵 如Ctrl N 使用時(shí)是先按下 Ctrl 健不放 然后再按 N 鍵 任何時(shí)候按下快捷鍵 相應(yīng)的菜單命令都會(huì)被執(zhí)行 5 1 1更改應(yīng)用程序菜單 通過菜單編輯器直接修改菜單資源IDR MAINFRAME可以實(shí)現(xiàn)添加和修改應(yīng)用程序菜單 如下示例過程 例Ex MenuSDI 更改應(yīng)用程序菜單 1 創(chuàng)建一個(gè)默認(rèn)的單文檔應(yīng)用程序Ex MenuSDI 2 在項(xiàng)目工作區(qū)窗口中選擇ResourceView頁面 雙擊資 Menu 項(xiàng)中的IDR MAINFRAME 則菜單編輯器窗口出現(xiàn)在主界面的右邊 項(xiàng)目Ex MenuSDI相應(yīng)的菜單資源在菜單編輯器窗口中顯示出來 3 按快捷鍵Ctrl R 彈出 插入資源 對(duì)話框 在資源類型中選定 Menu 如圖 5 1 1更改應(yīng)用程序菜單 單擊 新建 按鈕 系統(tǒng)就會(huì)為應(yīng)用程序添加一個(gè)新的菜單資源 并自動(dòng)賦給它一個(gè)默認(rèn)的標(biāo)識(shí)符名稱 第一次為DR MENU1 以后依次為IDR MENU2 IDR MENU3 同時(shí)自動(dòng)打開這個(gè)新的菜單資源 5 1 1更改應(yīng)用程序菜單 在Menu資源的ID MENU1上右擊鼠標(biāo) 從彈出的快捷菜單中選擇 Properties 命令 在這里可以重新指定菜單資源ID 設(shè)置菜單資源的語言和條件 這個(gè)條件用來決定菜單資源包含到哪個(gè)環(huán)境中 例如當(dāng)指定條件為 DEBUG 則菜單資源只存在于Debug編譯環(huán)境中 5 1 1更改應(yīng)用程序菜單 在菜單的空位置上雙擊鼠標(biāo)左鍵 則出現(xiàn)它的屬性對(duì)話框 通過其屬性對(duì)話框?yàn)椴藛蜪D MENU1添加一個(gè)頂層彈出菜單項(xiàng) 測試 T 并在該菜單下添加一個(gè)子菜單項(xiàng) 返回 R ID設(shè)為ID TEST RETURN 需要再次強(qiáng)調(diào)的是 符號(hào) 用來指定后面的字符是一個(gè)助記符 7 打開Ex MenuSDI程序菜單資源IDR MAINFRAME 在 查看 菜單的最后添加一個(gè)子菜單項(xiàng) 顯示測試菜單 M ID設(shè)為ID VIEW TEST 8 為CMainFrame類添加一個(gè)CMenu類型的成員變量m NewMenu CMenu類是用來處理菜單的一個(gè)MFC類 5 1 1更改應(yīng)用程序菜單 按快捷鍵Ctrl W打開MFCClassWizard對(duì)話框 切換到MessageMaps頁面 從 Classname 列表中選擇CMainFrame 分別為菜單項(xiàng)ID VIEW TEST和ID TEST RETURN添加COMMAND消息映射 使用默認(rèn)的消息映射函數(shù)名 并添中下列代碼 voidCMainFrame OnViewTest m NewMenu Detach 使菜單對(duì)象和菜單句柄分離m NewMenu LoadMenu IDR MENU1 SetMenu NULL 清除應(yīng)用程序菜單SetMenu 5 2 2使用鍵盤快捷鍵 加速鍵也往往被稱為鍵盤快捷鍵 加速鍵也是一種資源 它的顯示 編輯過程和菜單相似 例如下面的示例過程是為前面兩個(gè)菜單ID VIEW TEST和ID TEST RETURN定義鍵盤快捷鍵 先打開上例的項(xiàng)目工作區(qū)窗口中Accelerator的資源項(xiàng) 雙擊IDR MAINFRAME 出現(xiàn)如圖的加速鍵資源列表 5 2 2使用鍵盤快捷鍵 2 建立一新的加速鍵 雙擊加速鍵列表的最下端的空行 彈出如圖所示的 AccelProperities 對(duì)話框 可設(shè)置的屬性如表所示 5 2 2使用鍵盤快捷鍵 3 在上述對(duì)話框中 選擇Ex MenuSDI添加的 顯示測試菜單 菜單項(xiàng)ID VIEW TEST作為要聯(lián)用的加速鍵的ID號(hào) 單擊 下一鍵 按鈕 并按下Ctrl 1作為此加速鍵的鍵值 4 按同樣的方法 為菜單項(xiàng)ID TEST RETURN添加加速鍵Ctrl 2 需要說明的是 為了使其他用戶能查看并使用該加速鍵 還需在相應(yīng)的菜單項(xiàng)文本后面添加加速鍵內(nèi)容 例如 可將ID VIEW TEST菜單項(xiàng)的標(biāo)題改成 顯示測試菜 M tCtrl 1 其 t 是將后面的 Ctrl 1 定位到一個(gè)表位 5 編譯運(yùn)行并測試 當(dāng)程序運(yùn)行后 按 Ctrl 1 和 Ctrl 2將執(zhí)行相應(yīng)的菜單命令 5 2 3菜單的編程控制 創(chuàng)建菜單CMenu類的CreateMenu和CreatePopupMenu分別用來創(chuàng)建一個(gè)菜單或子菜單框架 它們的原型如下 BOOLCreateMenu 產(chǎn)生一個(gè)空菜單BOOLCreatePopupMenu 產(chǎn)生一個(gè)空的彈出式子菜單2 裝入菜單資源將菜單資源裝入應(yīng)用程序中 需調(diào)用CMenu成員函數(shù)LoadMenu 然后用SetMenu對(duì)應(yīng)用程序菜單進(jìn)行重新設(shè)置 BOOLLoadMenu LPCTSTRlpszResourceName BOOLLoadMenu UINTnIDResource 其中 lpszResourceName為菜單資源名稱 nIDResource為菜單資源ID號(hào) 5 2 3菜單的編程控制 3 添加菜單項(xiàng)當(dāng)菜單創(chuàng)建后 用戶可以調(diào)用AppendMenu或InsertMenu函數(shù)來添加一些菜單項(xiàng) AppendMenu是將菜單項(xiàng)添加在菜單的末尾處 而InsertMenu在菜單的指定位置處插入菜單項(xiàng) 并將后面的菜單項(xiàng)依次下移 BOOLAppendMenu UINTnFlags UINTnIDNewItem 0 LPCTSTRlpszNewItem NULL BOOLAppendMenu UINTnFlags UINTnIDNewItem constCBitmap pBmp BOOLInsertMenu UINTnPosition UINTnFlags UINTnIDNewItem 0 LPCTSTRlpszNewItem NULL BOOLInsertMenu UINTnPosition UINTnFlags UINTnIDNewItem constCBitmap pBmp 4 刪除菜單項(xiàng)調(diào)用DeleteMenu函數(shù)可將指定的菜單項(xiàng)刪除 需要注意的是 調(diào)用該函數(shù)后 不管菜單依附的窗口是否改變 都應(yīng)調(diào)用CWnd DrawMenuBar使菜單更新 5 2 3菜單的編程控制 函數(shù)DeleteMenu的原型如下 BOOLDeleteMenu UINTnPosition UINTnFlags 其中 參數(shù)nPosition表示要?jiǎng)h除的菜單項(xiàng)位置 它由nFlags進(jìn)行說明 若當(dāng)nFlags為MF BYCOMMAND時(shí) nPosition表示菜單項(xiàng)的ID號(hào) 而當(dāng)nFlags為MF BYPOSITION時(shí) nPosition表示菜單項(xiàng)的位置 第一個(gè)菜單項(xiàng)位置為0 5 獲取菜單項(xiàng)下面的四個(gè)CMenu成員函數(shù)分別獲得菜單的項(xiàng)數(shù) 菜單項(xiàng)的ID號(hào) 菜單項(xiàng)的文本內(nèi)容以及彈出式子菜單的句柄 UINTGetMenuItemCount const 該函數(shù)用來獲得菜單的菜單項(xiàng)數(shù) 調(diào)用失敗后返回 1 UINTGetMenuItemID intnPos const 該函數(shù)用來獲得由nPos指定菜單項(xiàng)位置 以0為基數(shù) 的菜單項(xiàng)的標(biāo)識(shí)號(hào) 若nPos是SEPARATOR 則返回 1 5 2 3菜單的編程控制 intGetMenuString UINTnIDItem CString該函數(shù)用來獲得指定菜單的彈出式菜單的菜單句柄 該彈出式菜單位置由參數(shù)nPos指定 開始的位置為0 若菜單不存在 則創(chuàng)建一個(gè)臨時(shí)的菜單指針 下面的示例過程是利用CMenu成員函數(shù)向應(yīng)用程序菜單中添加并處理一個(gè)菜單項(xiàng) 例Ex Menu 菜單項(xiàng)的編程控制 1 創(chuàng)建一個(gè)默認(rèn)的單文檔應(yīng)用程序Ex Menu 5 2 3菜單的編程控制 選擇 查看 菜單 ResourceSymbols 命令 資源符號(hào) 對(duì)話框 它能對(duì)應(yīng)用程序中的資源標(biāo)識(shí)符進(jìn)行管理 程序中添加的菜單項(xiàng)需要一個(gè)標(biāo)識(shí)值 最好用一個(gè)標(biāo)識(shí)符來代替這個(gè)值 因此這里通過 資源符號(hào) 對(duì)話框來創(chuàng)建一個(gè)新的標(biāo)識(shí)符 5 2 3菜單的編程控制 3 單擊 新建 按鈕 在名字 Name 框中輸入一個(gè)新的標(biāo)識(shí)符ID NEW MENUITEM 在值 Value 框中 輸入該ID的值 系統(tǒng)要求用戶定義的ID值應(yīng)大于15 0X000F 而小于61440 0XF000 保留默認(rèn)的ID值101 單擊 確定 按鈕 NewSymbol 對(duì)話框 5 2 3菜單的編程控制 4 關(guān)閉 資源符號(hào) 對(duì)話框 在CMainFrame OnCreate函數(shù)中添加下列代碼 該函數(shù)在框架窗口創(chuàng)建時(shí)自動(dòng)調(diào)用 intCMainFrame OnCreate LPCREATESTRUCTlpCreateStruct CMenu pSysMenu GetMenu 獲得程序菜單指針CMenu pSubMenu pSysMenu GetSubMenu 1 獲得第二個(gè)子菜單的指針CStringStrMenuItem 新的菜單項(xiàng) pSubMenu AppendMenu MF SEPARATOR 增加一水平分隔線pSubMenu AppendMenu MF STRING ID NEW MENUITEM StrMenuItem 在子菜單中增加一菜單項(xiàng) 允許使用ON UPDATE COMMAND UI或ON COMMAND的菜單項(xiàng)m bAutoMenuEnable FALSE 關(guān)閉系統(tǒng)自動(dòng)更新菜單狀態(tài)SysMenu EnableMenuItem ID NEW MENUITEM MF BYCOMMAND MF ENABL 激活菜單項(xiàng)DrawMenuBar 更新菜單return0 5 2 3菜單的編程控制 5 用MFCClassWizard處理OnCommand消息并檢測用戶菜單的nID參數(shù) BOOLCMainFrame OnCommand WPARAMwParam LPARAMlParam wParam的低字節(jié)表示菜單 控件 加速鍵的命令I(lǐng)Dif LOWORD wParam ID NEW MENUITEM MessageBox 你選中了新的菜單項(xiàng) returnCFrameWnd OnCommand wParam lParam 6 編譯運(yùn)行并測試 這樣當(dāng)選擇菜單 編輯 新的菜單項(xiàng) 命令后 就會(huì)彈一個(gè)對(duì)話框 顯示 你選中了新的菜單項(xiàng) 消息 5 2 4使用快捷菜單 1 快捷菜單實(shí)現(xiàn)函數(shù)用資源編輯器和MFC庫的CMenu TrackPopupMenu函數(shù)可以很容易地創(chuàng)建這樣的菜單 CMenu TrackPopupMenu函數(shù)原型如下 BOOLTrackPopupMenu UINTnFlags intx inty CWnd pWnd LPCRECTlpRect NULL 該函數(shù)用來顯示一個(gè)浮動(dòng)的彈出式菜單 其位置由各參數(shù)決定 nFlags表示菜單在屏幕顯示的位置以及鼠標(biāo)按鈕標(biāo)志 nFlags的值及其對(duì)其他參數(shù)的影響 5 2 4使用快捷菜單 2 示例本示例是在前面Ex SDI基礎(chǔ)上進(jìn)行的 當(dāng)顯示主菜單IDR MAINFRAME時(shí) 右擊鼠標(biāo)彈出 查看 菜單的子菜單 當(dāng)顯示菜單IDR MENU1時(shí) 右擊鼠標(biāo)彈出 測試 菜單的子菜單 續(xù)例Ex MenuSDI 使用快捷菜單 1 打開前面的單文檔應(yīng)用程序Ex MenuSDI 2 用MFCClassWizard在CMainFrame類添加WM CONTEXTMENU消息映射 3 編譯運(yùn)行并測試 5 3 1使用工具欄編輯器 選擇菜單 文件 打開工作區(qū) 將前面的單文檔應(yīng)用程序Ex MenuSDI調(diào)入 在項(xiàng)目工作區(qū)窗口中選擇ResourceView頁面 雙擊 Toolbar 項(xiàng)中的IDR MAINFRAME則工具欄編輯器出現(xiàn)在主界面的右邊 5 3 1使用工具欄編輯器 1 創(chuàng)建一個(gè)新的工具欄按鈕在新建的工具欄中 最右端總有一個(gè)空按鈕 雙擊該按鈕彈出其屬性對(duì)話框 在ID框中輸入其標(biāo)識(shí)符名稱 其右端又出現(xiàn)一個(gè)新的空按鈕 2 移動(dòng)一個(gè)按鈕在工具欄中移動(dòng)一個(gè)按鈕 用鼠標(biāo)左鍵點(diǎn)中它并拖動(dòng)至相應(yīng)位置即可 如果用戶拖動(dòng)它離開工具欄位置 則此按鈕從工具欄中消失 3 刪除一個(gè)按鈕將選取中的按鈕拖離工具欄 則該按鈕就消失了 但若選中按鈕后 單擊Delete鍵并不能刪除一個(gè)按鈕 只是將按鈕中的圖形全部以背景色填充 5 3 1使用工具欄編輯器 4 在工具欄中插入空格在工具欄中插入空格有以下幾種情況 如果按扭前沒有任何空格 拖動(dòng)該按鈕向右移動(dòng)并當(dāng)覆蓋相鄰按鈕的一半以上時(shí) 釋放鼠標(biāo)鍵 則此按鈕前出現(xiàn)空格 如果按鈕前有空格而按鈕后沒有空格 拖動(dòng)該按鈕向左移動(dòng)并當(dāng)按鈕的左邊界接觸到前面按鈕時(shí) 釋放鼠標(biāo)鍵 則此按鈕后將出現(xiàn)空格 如果按鈕前后均有空格 拖動(dòng)該按鈕向右移動(dòng)并當(dāng)接觸到相鄰按鈕時(shí) 則此按鈕前的空格保留 按鈕后的空格消失 相反 拖動(dòng)該按鈕向左移動(dòng)并當(dāng)接觸到前一個(gè)相鄰按鈕時(shí) 則此按鈕前面的空格消失 后面的空格保留 5 工具欄按鈕屬性的設(shè)置雙擊某按鈕彈出其屬性對(duì)話框 如圖所示 5 3 1使用工具欄編輯器 工具欄按鈕屬性對(duì)話框 屬性對(duì)話框中的各項(xiàng)說明見表 5 3 2工具按鈕和菜單項(xiàng)相結(jié)合 工具按鈕和菜單項(xiàng)相結(jié)合是指當(dāng)選擇工具按鈕或菜單命令時(shí) 操作結(jié)果是一樣的 Ex MenuSDI基礎(chǔ)上進(jìn)行的 通過兩個(gè)工具按鈕分別顯示主菜單IDR MAINFRAME和菜單IDR MENU1 1 打開前面的單文檔應(yīng)用程序Ex MenuSDI 2 利用工具欄編輯器設(shè)計(jì)兩個(gè)工具按鈕 位置內(nèi)容如圖所示 3 雙擊剛才設(shè)計(jì)的第一個(gè)工具按鈕 彈出該工具按鈕的屬性對(duì)話框 將該工具按鈕的ID號(hào)設(shè)為ID TEST RETURN 在提示框內(nèi)鍵入 返回應(yīng)用程序主菜單 n返回主菜單 4 雙擊剛才設(shè)計(jì)的第二個(gè)工具按鈕 彈出該工具按鈕的屬性對(duì)話框 將該工具按鈕的ID號(hào)設(shè)為ID VEW TEST 在提示框內(nèi)鍵入 顯示測試菜單 n顯示測試菜單 5 3 2工具按鈕和菜單項(xiàng)相結(jié)合 設(shè)計(jì)的兩個(gè)工具欄按鈕 5 編譯運(yùn)行并測試 程序運(yùn)行后 將鼠標(biāo)移至剛才設(shè)計(jì)的第一個(gè)工具按鈕處 這時(shí)在狀態(tài)欄上顯示出 返回應(yīng)用程序主菜單 信息 若稍等片刻會(huì)彈出提示小窗口 顯示出 返回主菜單 字樣 單擊新添加的這兩個(gè)按鈕 會(huì)執(zhí)行相應(yīng)的菜單命令 5 3 3多個(gè)工具欄的使用 在用MFCAppWizard創(chuàng)建的文檔應(yīng)用程序中往往只有一個(gè)工具欄 但在實(shí)際應(yīng)用中 常常需要多個(gè)工具欄 1 將項(xiàng)目工作區(qū)切換到ResourceView頁面 展開Toolbar 工具欄 資源 用鼠標(biāo)單擊IDR MAINFRAME不松開 按下Ctrl鍵 移動(dòng)鼠標(biāo)將IDR MAINFRAME拖到Toolbar資源名稱上 復(fù)制了工具欄默認(rèn)資源IDR MAINFRAME 復(fù)制后的資源標(biāo)識(shí)系統(tǒng)自動(dòng)設(shè)為IDR MAINFRAME1 2 右擊工具欄資源IDR MAINFRAME1 從彈出的快捷菜單中選擇Properties命令 如圖所示 將ID設(shè)為IDR TOOLBAR1 5 3 3多個(gè)工具欄的使用 3 雙擊IDR TOOLBAR1 打開工具欄資源 按圖刪除不要的工具按鈕 4 在CMainFrame類中添加一個(gè)成員變量m wndTestBar 變量類型為CToolBar CToolBar類封裝了工具欄的操作 5 在CMainFrame OnCreate函數(shù)中添加工具欄創(chuàng)建代碼 intCMainFrame OnCreate LPCREATESTRUCTlpCreateStruct if CFrameWnd OnCreate lpCreateStruct 1 return 1 5 3 3多個(gè)工具欄的使用 intnRes m wndTestBar CreateEx this TBSTYLE FLAT WS CHILD WS VISIBLE CBRS TOP CBRS GRIPPER CBRS TOOLTIPS CBRS FLYBY CBRS SIZE DYNAMIC CRect 0 0 0 0 AFX IDW TOOLBAR 10 if nRes m wndTestBar LoadToolBar IDR TOOLBAR1 TRACE0 Failedtocreatetoolbar n return 1 failtocreate 在CMainFrame OnCreate函數(shù)中添加下面的工具欄創(chuàng)建代碼 m wndToolBar EnableDocking CBRS ALIGN ANY m wndTestBar EnableDocking CBRS ALIGN ANY EnableDocking CBRS ALIGN ANY DockControlBar 5 3 3多個(gè)工具欄的使用 AFX IDW TOOLBAR是系統(tǒng)內(nèi)部的工具欄子窗口標(biāo)識(shí) 并將AFX IDW TOOLBAR 1的值表示默認(rèn)的狀態(tài)欄子窗口標(biāo)識(shí) 當(dāng)打開 查看 菜單時(shí) 單擊 工具欄 菜單時(shí) 顯示或隱藏的工具欄不是原來的工具欄而是新添加的工具欄 我們需要重新指定工具欄子窗口的標(biāo)識(shí) 并使其值等于AFX IDW TOOLBAR 10 6 編譯運(yùn)行 結(jié)果如圖所示 5 3 3多個(gè)工具欄的使用 7 本例希望IDR TOOLBAR1工具欄和IDR MENU1菜單欄在一起 不是一開始就出現(xiàn) 還需要調(diào)用CFrameWnd類的成員函數(shù)ShowControlBar來使程序一開始運(yùn)行時(shí)隱藏工具欄IDR TOOLBAR1 在CMainFrame OnCreate函數(shù)中添加下列代碼 intCMainFrame OnCreate LPCREATESTRUCTlpCreateStruct ShowControlBar 代碼中 ShowControlBa函數(shù)有三個(gè)參數(shù) 第一個(gè)用來指定要操作的工具欄或狀態(tài)欄指針 第二個(gè)是一個(gè)布爾型 為TRUE時(shí)表示顯示 否則表示隱藏 第三個(gè)用來表示是否延遲顯示或隱藏 為FALSE時(shí)表示立即顯示或隱藏 5 3 3多個(gè)工具欄的使用 8 在CMainFrame OnViewTest和CMainFrame OnTestReturn函數(shù)中添加下列代碼 voidCMainFrame OnViewTest ShowControlBar 關(guān)閉主工具欄 voidCMainFrame OnTestReturn ShowControlBar 顯示主工具欄 5 3 3多個(gè)工具欄的使用 編譯運(yùn)行并測試 結(jié)果如圖所示 左邊是一開始運(yùn)行的結(jié)果 右邊是單擊工具按鈕運(yùn)行的結(jié)果 5 4 1狀態(tài)欄的定義 數(shù)組中的元素是一些標(biāo)識(shí)常量或是字符串資源的ID號(hào) 默認(rèn)的indicator數(shù)組包含了四個(gè)元素 ID SEPARATORID INDICATOR CAPSID INDICATOR NUMID INDICATOR SCRL分別顯示出CapsLock NumLock和ScrollLock這三個(gè)鍵的狀態(tài) 5 4 2狀態(tài)欄的常用操作 MFC的CStatusBar類封裝了狀態(tài)欄的大部分操作 1 增加和減少窗格狀態(tài)欄中的窗格分為信息行窗格和指示器窗格兩類 在狀態(tài)欄中增加一個(gè)信息行窗格 則只需在indicators數(shù)組中的適當(dāng)位置中增加一個(gè)ID SEPARATOR標(biāo)識(shí)即可 若在狀態(tài)欄中增加一個(gè)用戶指示器窗格 則在indicators數(shù)組中的適當(dāng)位置增加一個(gè)在字符串表中定義過的資源ID 其字符串的長度表示用戶指示器窗格的大小 若狀態(tài)欄減少一個(gè)窗格 操作與增加相類似 需減少indicators數(shù)組元素即可 2 在狀態(tài)欄上顯示文本調(diào)用CStatusBar SetPaneText函數(shù)可以更新任何窗格 包括信息行窗格 中的文本 此函數(shù)原型描述如下 5 4 2狀態(tài)欄的常用操作 BOOLSetPaneText intnIndex LPCTSTRlpszNewText BOOLbUpdate TRUE lpszNewText表示要顯示的字符串 nIndex是表示設(shè)置的窗格索引 第一個(gè)窗格的索引為0 若bUpdate為TRUE 則系統(tǒng)自動(dòng)更新顯示的結(jié)果 下面來看一個(gè)示例 例Ex SDIMouse 將鼠標(biāo)在窗口客戶區(qū)的位置顯示在狀態(tài)欄上 1 創(chuàng)建一個(gè)默認(rèn)的單文檔應(yīng)用程序Ex SDIMouse 2 將項(xiàng)目工作區(qū)切換到ClassView頁面 展開CMainFrame所有項(xiàng) 雙擊構(gòu)造函數(shù)CMainFrame 在文檔窗口中出現(xiàn)該函數(shù)的定義 在它的前面就是狀態(tài)欄數(shù)組的定義 3 將狀態(tài)欄indicators數(shù)組的定義改為下列代碼 staticUINTindicators ID SEPARATOR ID SEPARATOR 5 4 2狀態(tài)欄的常用操作 4 由于鼠標(biāo)移動(dòng)消息WM MOUSEMOVE在CMainFrame類映射后不起作用 只能映射到CEx SDIMouseView類中 CMainFrame類定義的成員變量 需要在CEx SDIMouseView類中添加訪問CMainFrame類的代碼 Ex SDIMouseView OnMouseMove函數(shù)代碼如下 voidCEx SDIMouseView OnMouseMove UINTnFlags CPointpoint CStringstr CMainFrame pFrame CMainFrame AfxGetApp m pMainWnd 獲得主窗口指針CStatusBar pStatus 5 4 2狀態(tài)欄的常用操作 5 將MainFrm h文件中的受保護(hù)變量m wndStatusBar變成公共變量 6 在Ex SDIMouseView cpp文件的開始處增加下列語句 include Ex SDIMouseView h include MainFrm h 7 編譯并運(yùn)行 結(jié)果如圖所示 5 4 3改變狀態(tài)欄的風(fēng)格 在MFC的CStatusBar類中 有兩個(gè)成員函數(shù)可以改變狀態(tài)欄風(fēng)格 它們是 voidSetPaneInfo intnIndex UINTnID UINTnStyle intcxWidth voidSetPaneStyle intnIndex UINTnStyle 其中 參數(shù)nIndex表示要設(shè)置的狀態(tài)欄窗格的索引 nID用來為狀態(tài)欄窗格指定新的ID cxWidth表示窗格的像素寬度 nStyle表示窗格的風(fēng)格類型 用來指定窗格的外觀 例如 將OnMouseMove函數(shù)修改為下列代碼 則結(jié)果如圖所示 voidCEx SDIMouseView OnMouseMove UINTnFlags CPointpoint CStringstr CMainFrame pFrame CMainFrame AfxGetApp m pMainWnd 獲得主窗口指針CStatusBar pStatus 獲得主窗口中的狀態(tài)欄指針 5 4 3改變狀態(tài)欄的風(fēng)格 if pStatus pStatus SetPaneStyle 1 SBPS POPOUT str Format X d Y d point x point y 格式化文本pStatus SetPaneText 1 str 更新第二個(gè)窗格的文本 CView OnMouseMove nFlags point 狀態(tài)欄窗格的風(fēng)格類型 習(xí)題 1 MFC單文檔和多文檔應(yīng)用程序一般是由哪些類構(gòu)成 2 什么是助記符 它是如何在菜單中定義的 3 若對(duì)同一個(gè)菜單用ClassWizard分別在視圖類和主框架窗口類CMainFrame都處理其COMMAND消息 并在它們的函數(shù)中添加相同的代碼 則當(dāng)用戶選擇該菜單后 會(huì)有什么樣的結(jié)果 為什么 4 什么是鍵盤快捷鍵 它是如何定義的 5 什么是快捷菜單 用程序?qū)崿F(xiàn)一般需要哪些步驟 6 狀態(tài)欄的作用是什么 狀態(tài)欄的窗格分為幾類 如何添加和減少相應(yīng)的窗格 7 若狀態(tài)欄只有一個(gè)用戶定義的指示器窗格 其ID號(hào)為ID TEXT PANE 應(yīng)如何定義 若當(dāng)用戶在客戶區(qū)雙擊鼠標(biāo) 在該窗格中顯示 雙擊鼠標(biāo) 字樣 則應(yīng)如何編程 8 上機(jī)練習(xí)本章的示例 6 1框架窗口 1 主框架窗口和文檔窗口 主框架窗口是應(yīng)用程序直接放置在桌面 DeskTop 上的那個(gè)窗口 每個(gè)應(yīng)用程序只能有一個(gè)主框架窗口 主框架窗口的標(biāo)題欄上往往顯示應(yīng)用程序的名稱 文檔窗口對(duì)于單文檔應(yīng)用程序來說 它和主框架窗口是一致的 即主框架窗口就是文檔窗口 而對(duì)于多文檔應(yīng)用程序 文檔窗口是主框架窗口的子窗口 多文檔應(yīng)用程序的框架窗口 6 1框架窗口 2 窗口狀態(tài)的改變 MFCAppWizard為每一個(gè)文檔應(yīng)用程序的框架窗口設(shè)置了相應(yīng)的大小和位置 但默認(rèn)的窗口狀態(tài)有時(shí)并不那么令人滿意 這時(shí)就需要對(duì)窗口狀態(tài)進(jìn)行適當(dāng)?shù)母淖?ShowWindow函數(shù)的參數(shù)值 6 1框架窗口 3 窗口風(fēng)格的設(shè)置 6 1框架窗口 2 在MFCAppWizard中進(jìn)行修改 選擇 文件 新建 菜單 在彈出的 新建 對(duì)話框中選擇 工程 標(biāo)簽 選擇MFCAppWizard exe 的項(xiàng)目類型 指定項(xiàng)目工作文件夾位置 輸入項(xiàng)目名Ex SDI2 單擊 確定 按鈕 2 在向?qū)У牡谝徊街?將應(yīng)用程序類型選為 單個(gè)文檔 新建 對(duì)話框 6 1框架窗口 3 單擊 下一個(gè) 按鈕 出現(xiàn)向?qū)У牡诙綄?duì)話框 在這里用戶可以選擇程序中是否加入數(shù)據(jù)庫的支持 Step2 對(duì)話框 6 1框架窗口 4 單擊 下一個(gè) 按鈕 出現(xiàn)向?qū)У牡谌綄?duì)話框 允許用戶在程序中加入復(fù)合文檔 自動(dòng)化 ActiveX控件的支持 6 1框架窗口 5 單擊 下一個(gè) 按鈕 出現(xiàn)向?qū)У牡谒牟綄?duì)話框 對(duì)話框的前幾項(xiàng)依次確定對(duì)浮動(dòng)工具條 打印與預(yù)覽以及通信網(wǎng)絡(luò)等特性的支持 6 1框架窗口 6 單擊 高級(jí) 按鈕 出現(xiàn)下圖所示的對(duì)話框 分別用于文檔模板字串資源內(nèi)容和窗口風(fēng)格的修改 6 1框架窗口 7 單擊 關(guān)閉 按鈕回到向?qū)?duì)話框 單擊 下一個(gè) 按鈕 出現(xiàn)如下圖所示的對(duì)話框 6 1框架窗口 8 單擊 下一個(gè) 按鈕 出現(xiàn)對(duì)話框 在這里 用戶可以對(duì)MFCAppWizard提供的默認(rèn)類名 基類名 各個(gè)源文件名進(jìn)行修改 6 1框架窗口 3 修改CREATESTRUCT結(jié)構(gòu) 當(dāng)窗口創(chuàng)建之前 系統(tǒng)自動(dòng)調(diào)用PreCreateWindow虛函數(shù) 在用MFCAppWizard創(chuàng)建文檔應(yīng)用程序結(jié)構(gòu)時(shí) MFC已為主窗口或文檔窗口類自動(dòng)重載了該虛函數(shù) BOOLCMainFrame PreCreateWindow CREATESTRUCT 6 1框架窗口 4 使用ModifyStyle和ModifyStyleEx CWnd類中的成員函數(shù)ModifyStyle和ModifyStyleEx也可用來更改窗口的風(fēng)格 其中ModifyStyleEx還可更改窗口的擴(kuò)展風(fēng)格 6 1框架窗口 5 改變窗口的大小和位置 用CWnd類的成員函數(shù)SetWindowPos或MoveWindow可以改變窗口的大小和位置 SetWindowPos是一個(gè)非常有用的函數(shù) 它不僅可以改變窗口的大小 位置 而且還可以改變所有窗口在堆棧排列的次序 Z次序 這個(gè)次序是根據(jù)它們?cè)谄聊怀霈F(xiàn)的先后來確定的 6 2文檔模板 1 文檔模板類 文檔應(yīng)用程序框架結(jié)構(gòu)是在程序運(yùn)行一開始構(gòu)造的 在單文檔應(yīng)用程序 設(shè)項(xiàng)目名為Ex SDI 的應(yīng)用程序類InitInstance函數(shù)中 可以看到這樣的代碼 BOOLCEx SDI2App InitInstance CSingleDocTemplate pDocTemplate pDocTemplate newCSingleDocTemplate IDR MAINFRAME 資源ID RUNTIME CLASS CEx SDIDoc 文檔類 RUNTIME CLASS CMainFrame 主框架窗口類 RUNTIME CLASS CEx SDIView 視圖類 AddDocTemplate pDocTemplate returnTRUE 6 2文檔模板 2 文檔模板字符串資源 在MFCAppWizard創(chuàng)建的應(yīng)用程序資源中 許多資源標(biāo)識(shí)符都是IDR MAINFRAME 這就意味著這些具有同名標(biāo)識(shí)的資源將被框架自動(dòng)加載到應(yīng)用程序中 6 2文檔模板 3 使用多個(gè)文檔類型 用MFCAppWizard exe 創(chuàng)建一個(gè)默認(rèn)的多文檔應(yīng)用程序項(xiàng)目Ex MDIDemo 2 打開項(xiàng)目工作區(qū)窗口中StringTable的資源項(xiàng) 雙擊該項(xiàng)下的StringTable 打開字符串表資源 6 2文檔模板 3 雙擊IDR MAINFRAME列表項(xiàng) 彈出字符串屬性對(duì)話框 將其標(biāo)題修改為 多個(gè)文檔類型實(shí)例 4 雙擊IDR EX MDITYPE列表項(xiàng) 在字符串屬性對(duì)話中 將其內(nèi)容修改 5 拖動(dòng)字符串表編輯器右邊的滾動(dòng)塊 直到出現(xiàn)最后一個(gè)字符串項(xiàng) 雙擊最后的空行 在字符串屬性對(duì)話框中將ID設(shè)為 修改IDR MAINFRAME字符串標(biāo)題 添加新的字符串項(xiàng) 6 2文檔模板 6 按快捷鍵Ctrl W 打開MFCClassWizard 單擊 AddClass 按鈕 從彈出的菜單中選擇New 出現(xiàn) NewClass 對(duì)話框 在Name框中輸入類名COtherDoc 在Baseclass組合框中選擇基類CDocument 7 單擊 OK 按鈕 新的文檔類COtherDoc就添加到Ex MDIDemo項(xiàng)目中 8 修改CEx MDIDemoApp InitInstance函數(shù)代碼 9 在類CEx MDIDemoApp源代碼文件Ex MDIDemo cpp的開始處 添加包含前面創(chuàng)建的兩個(gè)派生類的頭文件 添加新的文檔類COtherDoc 6 2文檔模板 編譯運(yùn)行并測試 多類型文檔窗口顯示 文檔類型新建對(duì)話框 文件打開對(duì)話框中的文件類型 6 3 1MFC文檔讀寫機(jī)制 1 創(chuàng)建空文檔 文檔應(yīng)用程序運(yùn)行到應(yīng)用程序類的InitInstance函數(shù)時(shí) 它會(huì)在調(diào)用了AddDocTemplate函數(shù)之后 通過CWinApp ProcessShellCommand間接調(diào)用CWinApp的另一個(gè)非常有用的成員函數(shù)OnFileNew 并依次完成工作 2 打開文檔 當(dāng)MFCAppWizard創(chuàng)建文檔應(yīng)用程序時(shí) 它會(huì)自動(dòng)將 文件 File 菜單中的 打開 Open 命令 ID號(hào)為ID FILE OPEN 映射到CWinApp的OnFileOpen成員函數(shù) 3 保存文檔 當(dāng)MFCAppWizard創(chuàng)建應(yīng)用程序時(shí) 它會(huì)自動(dòng)將 文件 File 菜單中的 保存 Save 命令與文檔類CDocument的OnFileSave函數(shù)在內(nèi)部關(guān)聯(lián)起來 但用戶在程序框架中看不到相應(yīng)的代碼 6 3 1MFC文檔讀寫機(jī)制 4 關(guān)閉文檔 1 若文檔內(nèi)容已被修改 則彈出一個(gè)消息對(duì)話框 詢問用戶是否需要將文檔保存 2 調(diào)用CDocument OnCloseDocument虛函數(shù) 關(guān)閉所有與該文檔相關(guān)聯(lián)的文檔窗口及相應(yīng)的視圖 調(diào)用文檔類CDocument的DeleteContents清除文檔數(shù)據(jù) 5 文檔讀寫操作 打開和保存文檔時(shí) 系統(tǒng)都會(huì)自動(dòng)調(diào)用Serialize函數(shù) 事實(shí)上 MFCAppWizard在創(chuàng)建文檔應(yīng)用程序框架時(shí)已在文檔類中重載了Serialize函數(shù) 通過在該函數(shù)中添加代碼可達(dá)到實(shí)現(xiàn)數(shù)據(jù)序列化的目的 ar中可以使用 運(yùn)算符的數(shù)據(jù)類型 1 簡單數(shù)組集合類的構(gòu)造及元素的添加 對(duì)簡單數(shù)組集合類構(gòu)造的方法都是一樣的 均是使用各自的構(gòu)造函數(shù) 它們的原型如下 CByteArrayCByteArray CDWordArrayCDWordArray CObArrayCObArray CPtrArrayCPtrArray CStringArrayCStringArray CUIntArrayCUIntArray CWordArrayCWordArray 6 3 2 使用簡單數(shù)組集合類 6 3 2 使用簡單數(shù)組集合類 2 訪問簡單數(shù)組集合類的元素 在MFC中 既可以使用GetAt函數(shù) 也可使用 操作符 CObArray operator 示例CObArrayarray CAge pa CAge是一個(gè)用戶類array Add newCAge 21 添加一個(gè)元素array Add newCAge 40 再添加一個(gè)元素pa CAge array 0 獲取元素0ASSERT pa CAge 21 array 0 newCAge 30 替換元素0 ASSERT CAge array 0 CAge 30 CObArray GetAt示例CObArrayarray array Add newCAge 21 元素0array Add newCAge 40 元素1ASSERT CAge array GetAt 0 CAge 21 6 3 2 使用簡單數(shù)組集合類 3 刪除簡單數(shù)組集合類的元素 1 使用函數(shù)GetSize和整數(shù)下標(biāo)值訪問簡單數(shù)組集合類中的元素 2 若對(duì)象元素是在堆內(nèi)存中創(chuàng)建的 則使用delete操作符刪除每一個(gè)對(duì)象元素 3 調(diào)用函數(shù)RemoveAll刪除簡單數(shù)組集合類中的所有元素 CObArrayarray CAge pa1 CAge pa2 array Add pa1 newCAge 21 array Add pa2 newCAge 40 ASSERT array GetSize 2 for inti 0 i array GetSize i deletearray GetAt i array RemoveAll 下面代碼過程是一個(gè)CObArray的刪除示例 6 3 3 建立可序列化的類 使一個(gè)類可序列化的目的是使其具有CArchive的序列化功能 即可以在文檔類中的Serialize函數(shù)中直接通過CArchive引用變量進(jìn)行該類數(shù)據(jù)的讀寫操作 在MFC中 一個(gè)可序列化的類必須是CObject的一個(gè)派生類 且在類聲明中 需要包含DECLARE SERIAL宏調(diào)用 而在類的實(shí)現(xiàn)文件中包含IMPLEMENT SERIAL宏調(diào)用 這個(gè)宏有三個(gè)參數(shù) 前兩個(gè)參數(shù)分別表示類名和基類名 第三個(gè)參數(shù)表示應(yīng)用程序的版本號(hào) 最后還需要重載Serialize函數(shù) 使該類的數(shù)據(jù)成員進(jìn)行相關(guān)序列化操作 6 3 4 文檔序列化示例 添加用于學(xué)生基本信息記錄輸入的對(duì)話框 對(duì)話框資源的復(fù)制 學(xué)生基本信息輸入對(duì)話框 6 3 4 文檔序列化示例 2 添加并處理菜單項(xiàng) 在Ex StudentDoc cpp文件的開始處 添加包含CStuInfoDlg類的頭文件包含 2 在菜單資源的主菜單中添加頂層菜單項(xiàng) 學(xué)生基本信息 S 在該頂層菜單項(xiàng)中添加子菜單 添加 A ID STUINFO ADD 3 用MFCClassWizard為CEx StudentDoc類添加處理菜單項(xiàng)ID STUINFO ADD的COMMAND消息 并添加代碼 voidCEx StudentDoc OnStuinfoAdd CStuInfoDlgdlg if dlg DoModal IDOK return 添加記錄CStudentInfo pStudent newCStudentInfo dlg m strName dlg m strNo dlg m bMale dlg m tBirth dlg m strSpecial m stuObArray Add pStudent SetModifiedFlag 設(shè)置文檔更改標(biāo)志UpdateAllViews NULL 更新視圖 6 3 4 文檔序列化示例 3 修改CEx StudentDoc類代碼 在Ex StudentDoc h文件的classCEx StudentDoc前面 添加包含CStudentInfo類的頭文件 2 為CEx StudentDoc類添加下列成員變量 public CObArraym stuObArray 對(duì)象集合類對(duì)象 3 為CEx StudentDoc類添加成員函數(shù)CStudentInfo GetStudentInfoAt intnIndex 用來獲取m stuObArray中指定索引號(hào)的CStudentInfo類指針 為CEx StudentDoc類添加成員函數(shù)intGetAllRecNum void 用于獲取集合類中對(duì)象的個(gè)數(shù)其代碼如下 intCEx StudentDoc GetAllRecNum returnm stuObArray GetSize 6 3 4 文檔序列化示例 5 在CEx StudentDoc類析構(gòu)函數(shù) CEx StudentDoc添加下列代碼 CEx StudentDoc CEx StudentDoc intnIndex GetAllRecNum while nIndex deletem stuObArray GetAt nIndex 刪除并釋放對(duì)象的內(nèi)存空間m stuObArray RemoveAll 6 在CEx StudentDoc Serialize函數(shù)中添加下列代碼 voidCEx StudentDoc Serialize CArchive 6 3 4 文檔序列化示例 4 修改CEx StudentView類代碼 voidCEx StudentView OnDraw CDC pDC CEx StudentDoc pDoc GetDocument ASSERT VALID pDoc inty 0 for intnIndex 0 nIndexGetAllRecNum nIndex pDoc GetStudentInfoAt nIndex Display y pDC y 16 將CEx StudentView OnDraw代碼修改 用來將所有的學(xué)生基本信息記錄顯示在視圖中 6 3 4 文檔序列化示例 5 修改文檔的字串資源打開文檔的字串資源IDR MAINFRAME 將其內(nèi)容修改為 6 編譯運(yùn)行并測試 Ex Student運(yùn)行結(jié)果 Ex Student nStudentRec nEx Stu n記錄文件 rec n rec nExStudent Document nEx StuDocument 6 3 5 使用CFile類 文件的打開和關(guān)閉 1 構(gòu)造一個(gè)不帶指定任何參數(shù)的CFile對(duì)象 2 調(diào)用成員函數(shù)Open并指定文件路徑以及文件標(biāo)志 CFile類的文件訪問方式 6 3 5 使用CFile類 2 文件的讀寫和定位 CFile還支持獲取文件狀態(tài) 包括文件是否存在 創(chuàng)建與修改的日期和時(shí)間 邏輯大小和路徑等 rStatus用來存放文件狀態(tài)信息 它是一個(gè)CFileStatus結(jié)構(gòu)類型 該結(jié)構(gòu)具有下列成員 CTimem ctime文件創(chuàng)建日期和時(shí)間CTimem mtime文件最后一次修改日期和時(shí)間CTimem atime文件最后一次訪問日期和時(shí)間LONGm size文件的邏輯大小字節(jié)數(shù) 就像DOS命令中DIR所顯示的大小BYTEm attribute文件屬性charm szFullName MAX PATH 文件名 3 CFile和CArchive類之間的關(guān)聯(lián) 可以將一個(gè)外部磁盤文件和一個(gè)CArchive對(duì)象關(guān)聯(lián)起來 6 4 1 一般視圖類的使用 MFC中的CView類及其它的派生類封裝了視圖的各種不同的功能 它們?yōu)橛脩魧?shí)現(xiàn)最新的Windows特性提供了很大的便利 CView的派生類及其功能描述 6 4 1 一般視圖類的使用 1 CEditView類 CEditView類對(duì)象是一種視圖 像CEdit類一樣 它也提供窗口編輯控制功能 可以用來執(zhí)行簡單文本操作 如打印 查找 替換 剪貼板的剪切 復(fù)制和粘貼等 更改CEx EditView的基類 Ex Edit運(yùn)行結(jié)果 6 4 1 一般視圖類的使用 2 CRichEditView類 CRichEditView類使用了復(fù)文本編輯控件 因此它支持混合字體格式和更大數(shù)據(jù)量的文本 CRichEditView類被設(shè)計(jì)成與CRichEditDoc和CRichEditCntrItem類一起使用 它們可實(shí)現(xiàn)一個(gè)完整的ActiveX包容器應(yīng)用程序 3 CFormView類 1 添加并設(shè)計(jì)表單 NewForm 對(duì)話框 添加表單后的開發(fā)環(huán)境 6 4 1 一般視圖類的使用 2 完善代碼并測試 Ex Form運(yùn)行結(jié)果 Ex Form最終運(yùn)行結(jié)果 3 CHtmlView類 CHtmlView類是在文檔視圖結(jié)構(gòu)中提供WebBrowser控件的功能 4 CScrollView類 5 列表視圖 CScrollView類不僅能直接支持視圖的滾動(dòng)操作 而且還能管理視口的大小和映射模式 并能響應(yīng)滾動(dòng)條消息 鍵盤消息以及鼠標(biāo)滾輪消息 列表視圖類CListView按照MFC文檔視圖結(jié)構(gòu)封裝了列表控件CListCtrl的功能 6 樹視圖 6 4 2 文檔與視圖的相互作用 CView GetDocument函數(shù) 視圖對(duì)象只有一個(gè)與之相聯(lián)系的文檔對(duì)象 它所包含的GetDocument函數(shù)允許應(yīng)用程序由視圖得到與之相關(guān)聯(lián)的文檔 2 CDocument UpdateAllViews函數(shù) 如果文檔中的數(shù)據(jù)發(fā)生了改變 那么所有的視圖都必須被通知到 以便它們能夠?qū)λ@示的數(shù)據(jù)進(jìn)行相應(yīng)的更新 3 CView OnUpdate函數(shù) 這是一個(gè)虛函數(shù) 4 CView OnInitialUpdate函數(shù) 當(dāng)應(yīng)用程序被啟動(dòng)時(shí) 或當(dāng)用戶從 文件 菜單中選擇了 新建 或 打開 時(shí) 該CView虛函數(shù)都會(huì)被自動(dòng)調(diào)用 5 CDocument OnNewDocument函數(shù) 在文檔應(yīng)用程序中 當(dāng)用戶從 文件 菜單中選擇 新建 命令時(shí) 框架將首先構(gòu)造一個(gè)文檔對(duì)象 然后調(diào)用該虛函數(shù) 6 4 3 應(yīng)用程序?qū)ο笾羔樀幕フ{(diào) 從文檔類中獲取視圖對(duì)象指針 在文檔類中有一個(gè)與其關(guān)聯(lián)的各視圖對(duì)象的列表 并可通過CDocument類的成員函數(shù)GetFirstViewPo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論