第10章在MFC中創(chuàng)建應(yīng)用序的資源_第1頁(yè)
第10章在MFC中創(chuàng)建應(yīng)用序的資源_第2頁(yè)
第10章在MFC中創(chuàng)建應(yīng)用序的資源_第3頁(yè)
第10章在MFC中創(chuàng)建應(yīng)用序的資源_第4頁(yè)
第10章在MFC中創(chuàng)建應(yīng)用序的資源_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1第第10章章 在在mfc中創(chuàng)建應(yīng)中創(chuàng)建應(yīng)用程序的資源用程序的資源 2 在在windows的可執(zhí)行文件中,資源是的可執(zhí)行文件中,資源是獨(dú)立于代碼的,使用單獨(dú)的獨(dú)立于代碼的,使用單獨(dú)的resource compiler進(jìn)行編譯,并嵌入到可執(zhí)行文進(jìn)行編譯,并嵌入到可執(zhí)行文件中。件中。 在編程過(guò)程中,代碼是可復(fù)用的,資在編程過(guò)程中,代碼是可復(fù)用的,資源也是可復(fù)用的,通過(guò)資源的源也是可復(fù)用的,通過(guò)資源的“導(dǎo)入導(dǎo)入”和和“導(dǎo)出導(dǎo)出”功能來(lái)實(shí)現(xiàn)資源的可復(fù)用。功能來(lái)實(shí)現(xiàn)資源的可復(fù)用。 程序的國(guó)際化,也是通過(guò)資源來(lái)實(shí)現(xiàn)程序的國(guó)際化,也是通過(guò)資源來(lái)實(shí)現(xiàn)的。的。 310.1獲取資源的一個(gè)樣例獲取資源的一個(gè)樣例 查

2、看查看windows(98/2000)系統(tǒng)中自帶的紙系統(tǒng)中自帶的紙牌游戲中的圖片資源:牌游戲中的圖片資源: c:windowscards.dll 或或 c:winntsystem32410.2 資源的應(yīng)用資源的應(yīng)用 510.2.1 菜單資源的使用菜單資源的使用 創(chuàng)建一創(chuàng)建一個(gè)個(gè)“計(jì)計(jì)算算”菜菜單單6【例【例10-1】創(chuàng)建一個(gè)基于單文檔結(jié)構(gòu)的應(yīng)用程】創(chuàng)建一個(gè)基于單文檔結(jié)構(gòu)的應(yīng)用程序,在視圖中顯示一行字符串序,在視圖中顯示一行字符串“hello world!”,通過(guò)建立包含,通過(guò)建立包含“顯示顯示”和和“顏色顏色選擇選擇”兩個(gè)菜單項(xiàng)的兩個(gè)菜單項(xiàng)的“操作操作”菜單來(lái)控制字菜單來(lái)控制字符串,菜單項(xiàng)符串

3、,菜單項(xiàng)“顯示顯示”用以控制字符串的顯用以控制字符串的顯示與否,菜單項(xiàng)示與否,菜單項(xiàng)“顏色選擇顏色選擇”中包含一個(gè)級(jí)中包含一個(gè)級(jí)連菜單,內(nèi)容為連菜單,內(nèi)容為“紅紅”、“綠綠”和和“藍(lán)藍(lán)”三三個(gè)菜單項(xiàng)。個(gè)菜單項(xiàng)。 hello world!id_oper_redid_oper_greenid_oper_blueid_oper_show7在在my_resview.h中的中的 class cmy_resview : public cview中的中的public處加入如下聲明:處加入如下聲明:colorref m_ncolors3; /用戶可選顏色數(shù)組用戶可選顏色數(shù)組dword m_ncolorinde

4、x; / 當(dāng)前所選顏色索引當(dāng)前所選顏色索引cstring m_strshow; / 顯示的內(nèi)容顯示的內(nèi)容 bool m_bshow; / 是否顯示是否顯示8在在cmy_resview:cmy_resview()中初始化成員變量:中初始化成員變量:m_ncolors0 = rgb(255,0,0);m_ncolors1 = rgb(0,255,0);m_ncolors2 = rgb(0,0,255);m_ncolorindex = 0;m_strshow = hello world!;m_bshow = true; 在在void cmy_resview:ondraw(cdc* pdc)中加入如下

5、代碼繪制字符串:中加入如下代碼繪制字符串: if(m_bshow)pdc-settextcolor(m_ncolorsm_ncolorindex); / 設(shè)置輸出字符串顏色設(shè)置輸出字符串顏色pdc-textout(100,100,m_strshow); / 輸出字符串輸出字符串9 若編譯運(yùn)行程序,可看到程序輸出一行紅色若編譯運(yùn)行程序,可看到程序輸出一行紅色的字符串,但顏色設(shè)置菜單項(xiàng)還沒(méi)有起作用的字符串,但顏色設(shè)置菜單項(xiàng)還沒(méi)有起作用 下面將介紹如何通過(guò)菜單項(xiàng)來(lái)控制程序,下面將介紹如何通過(guò)菜單項(xiàng)來(lái)控制程序,在介紹菜單項(xiàng)的響應(yīng)時(shí),必須先了解幾個(gè)消在介紹菜單項(xiàng)的響應(yīng)時(shí),必須先了解幾個(gè)消息響應(yīng)機(jī)制:息響

6、應(yīng)機(jī)制: command消息的響應(yīng)消息的響應(yīng) update_command_ui消息的響應(yīng)消息的響應(yīng) on_command_range對(duì)對(duì)command消息的響應(yīng)消息的響應(yīng)on_update_command_ui_range對(duì)對(duì)update_command_ui消息的響應(yīng)消息的響應(yīng)10(1) command消息的響應(yīng)消息的響應(yīng) 添加了對(duì)添加了對(duì)command消息的響應(yīng)之后,消息的響應(yīng)之后, my_resview.h發(fā)發(fā)生如下變化:生如下變化:/ generated message map functionsprotected: /afx_msg(cmy_resview) afx_msg voi

7、d onopershow();/afx_msg11在在my_resview.cpp文件中,讀者會(huì)看到文件中,讀者會(huì)看到id_oper_show對(duì)應(yīng)的對(duì)應(yīng)的command消息的綁定,代碼如下消息的綁定,代碼如下 :begin_message_map(cmy_resview, cview)/afx_msg_map(cmy_resview)on_command(id_oper_show, onopershow)/afx_msg_map/ standard printing commandson_command(id_file_print, cview:onfileprint)on_command(i

8、d_file_print_direct, cview:onfileprint)on_command(id_file_print_preview, cview:onfileprintpreview)end_message_map() 在在my_resview.cpp文件的最后加入如下代碼:文件的最后加入如下代碼:void cmy_resview:onopershow()m_bshow = !m_bshow; invalidate(); / 強(qiáng)制程序重新窗口強(qiáng)制程序重新窗口重新編譯運(yùn)行程重新編譯運(yùn)行程序,可看到序,可看到“顯顯示示”菜單項(xiàng)工作菜單項(xiàng)工作正常正常 12(2) update_comma

9、nd_ui消息的響應(yīng)消息的響應(yīng) update_command_ui消息是在窗口將要繪制菜單項(xiàng)的時(shí)消息是在窗口將要繪制菜單項(xiàng)的時(shí)候產(chǎn)生,上例中,僅僅只是使用候產(chǎn)生,上例中,僅僅只是使用“顯示顯示”菜單項(xiàng)來(lái)控制是否顯菜單項(xiàng)來(lái)控制是否顯示似乎還不夠,如果示似乎還不夠,如果“顯示顯示”菜單項(xiàng)能夠配合主程序體現(xiàn)出當(dāng)菜單項(xiàng)能夠配合主程序體現(xiàn)出當(dāng)前是否顯示的狀態(tài)可能會(huì)更好一些。就像一個(gè)文本編輯軟件,前是否顯示的狀態(tài)可能會(huì)更好一些。就像一個(gè)文本編輯軟件,菜單上是菜單上是“10號(hào)字號(hào)字”、“12號(hào)字號(hào)字”的功能,如果不在菜單上標(biāo)的功能,如果不在菜單上標(biāo)識(shí)出來(lái),那么使用者可能就搞不清當(dāng)前的字是多大的。識(shí)出來(lái),那么

10、使用者可能就搞不清當(dāng)前的字是多大的。 為為id_oper_show添加添加update_command_ui消息。在自動(dòng)生消息。在自動(dòng)生成消息處理函數(shù)中加入如下代碼:成消息處理函數(shù)中加入如下代碼:void cmy_resview:onupdateopershow(ccmdui* pcmdui)pcmdui-setcheck(m_bshow);此時(shí)可看到隨著此時(shí)可看到隨著m_bshow的值的改變,顯示菜單項(xiàng)的狀的值的改變,顯示菜單項(xiàng)的狀態(tài)與實(shí)際是否顯示字符串的狀態(tài)一致了,通過(guò)菜單項(xiàng)前面的態(tài)與實(shí)際是否顯示字符串的狀態(tài)一致了,通過(guò)菜單項(xiàng)前面的“”標(biāo)記來(lái)體現(xiàn)。標(biāo)記來(lái)體現(xiàn)。13void enable(

11、bool bon = true )禁止或者允許該菜單項(xiàng)禁止或者允許該菜單項(xiàng)void setcheck( int ncheck = 1 )設(shè)置菜單項(xiàng)設(shè)置菜單項(xiàng)/工具條按鈕的工具條按鈕的check狀態(tài),顯示標(biāo)志為狀態(tài),顯示標(biāo)志為“”void setradio( bool bon = true )與與setcheck功能類似,顯示標(biāo)志為功能類似,顯示標(biāo)志為“”void settext( lpctstr lpsztext )設(shè)置菜單項(xiàng)的設(shè)置菜單項(xiàng)的caption屬性屬性ccmdui類常類常用的方法用的方法14(3) on_command_range對(duì)對(duì)command消息的響應(yīng)消息的響應(yīng) on_comm

12、and_range為處理具有連續(xù)為處理具有連續(xù)object id的菜的菜單項(xiàng)提供了方便的途徑。單項(xiàng)提供了方便的途徑。 前面只響應(yīng)了三種顏色操作,若有前面只響應(yīng)了三種顏色操作,若有100種顏色可供種顏色可供選擇,是否逐個(gè)定義其響應(yīng)函數(shù)?顯然工作量很大,選擇,是否逐個(gè)定義其響應(yīng)函數(shù)?顯然工作量很大,我們可以使用我們可以使用on_command_range。 這涉及到這涉及到id范圍的上下界及當(dāng)前的范圍的上下界及當(dāng)前的id,若,若resource.h中若干個(gè)中若干個(gè)id不連續(xù),要不連續(xù),要手工手工修改為連續(xù)的。修改為連續(xù)的。 由于由于classwizard不支持不支持on_command_range

13、消消息的自動(dòng)映射,只能手工添加消息的處理。息的自動(dòng)映射,只能手工添加消息的處理。 在在my_resview.h中聲明消息的處理函數(shù)中聲明消息的處理函數(shù)/afx_msg(cmy_resview) afx_msg void onopershow(); afx_msg void onupdateopershow(ccmdui* pcmdui); afx_msg void onopercolorchange(word nid);/afx_msg 所處理的菜單項(xiàng)的所處理的菜單項(xiàng)的id。15在在my_resview.cpp的開(kāi)頭部分加入如下斜體標(biāo)識(shí)的代碼,的開(kāi)頭部分加入如下斜體標(biāo)識(shí)的代碼,完成消息映射完成

14、消息映射begin_message_map(cmy_resview, cview)/on_command_range(id_oper_red,/ id范圍的最小值范圍的最小值id_oper_blue,/ id范圍的最大值范圍的最大值onopercolorchange) /消息處理函數(shù)消息處理函數(shù)end_message_map()在在my_resview.cpp的最后加入消息處理函數(shù):的最后加入消息處理函數(shù):void cmy_resview:onopercolorchange(word nid)m_ncolorindex = nid-id_oper_red;invalidate(); 運(yùn)行程序,

15、可以通過(guò)菜單項(xiàng)來(lái)改變顏色了運(yùn)行程序,可以通過(guò)菜單項(xiàng)來(lái)改變顏色了16(4) on_update_command_ui_range on_update_command_ui_range與與on_update_command_ui的關(guān)系類似和的關(guān)系類似和on_command_range與與on_command的關(guān)系的關(guān)系 下面仿照手工加入下面仿照手工加入on_command_range過(guò)程加過(guò)程加入入on_update_command_ui_range宏。宏。在在my_resview.h中加入如下代碼:中加入如下代碼:afx_msg void onupdateopercolorchange(ccmd

16、ui * pcmdui);17在在my_resview.cpp中加入如下代碼:中加入如下代碼:on_update_command_ui_range(id_oper_red,id_oper_blue,onupdateopercolorchange)void cmy_resview:onupdateopercolorchange(ccmdui * pcmdui) pcmdui-setradio(m_ncolorindex=(pcmdui-m_nid - id_oper_red);由于由于ccmdui類的成員類的成員m_nid就是調(diào)用就是調(diào)用onupdateopercolorchange時(shí)當(dāng)前的菜單

17、項(xiàng)時(shí)當(dāng)前的菜單項(xiàng)id,因此,因此onupdateopercolorchange函數(shù)沒(méi)有函數(shù)沒(méi)有nid這個(gè)參數(shù)這個(gè)參數(shù)1810.2.210.2.2快捷菜單的創(chuàng)建及其應(yīng)用快捷菜單的創(chuàng)建及其應(yīng)用 【例【例10-210-2】在【例】在【例10-110-1】的基礎(chǔ)上增加快捷菜】的基礎(chǔ)上增加快捷菜單,實(shí)現(xiàn)單,實(shí)現(xiàn)“操作操作”菜單的功能菜單的功能 1. 創(chuàng)建菜單資源:創(chuàng)建菜單資源:在在resourceview菜單中右擊菜單中右擊menu,選擇選擇insert menu,資源命名為,資源命名為idr_menu_pop 19在在my_resview.h中聲明快捷菜單中對(duì)應(yīng)的變量。中聲明快捷菜單中對(duì)應(yīng)的變量。cm

18、enum_popmenu;/ pop-up快捷菜單快捷菜單cmenu*m_ppop;/ pop-up快捷子菜單快捷子菜單afx_msg void onrbuttondown(uint nflags, cpoint point);在在my_resview.cpp中添加如下代碼:中添加如下代碼:on_command(id_pop_show, onopershow) /消息響應(yīng)消息響應(yīng)cmy_resview:cmy_resview() m_popmenu.loadmenu(idr_menu_view); / 創(chuàng)建并加載菜單資源創(chuàng)建并加載菜單資源20cmy_resview:cmy_resview()m

19、_popmenu.destroymenu(); / 釋放菜單資源釋放菜單資源void cmy_resview:onrbuttondown(uint nflags, cpoint point) m_ppop=m_popmenu.getsubmenu(0); /獲得第一個(gè)子菜單獲得第一個(gè)子菜單 uint ncheck = m_bshow?mf_checked:mf_unchecked; / 更新【更新【show】的】的check狀態(tài)狀態(tài)m_ppop-checkmenuitem(id_pop_show,mf_bycommand|ncheck);clienttoscreen(&point);

20、/將坐標(biāo)由客戶坐標(biāo)轉(zhuǎn)化為屏幕坐標(biāo)將坐標(biāo)由客戶坐標(biāo)轉(zhuǎn)化為屏幕坐標(biāo)m_ppop-trackpopupmenu(tpm_leftalign,point.x,point.y,this);/ 顯示顯示pop-up菜單菜單cview:onrbuttondown(nflags, point); 2110.2.3加速鍵資源的創(chuàng)建及其使用加速鍵資源的創(chuàng)建及其使用 【例【例10-3】在【例】在【例10-2】的基礎(chǔ)上添加】的基礎(chǔ)上添加ctrl+w來(lái)觸來(lái)觸發(fā)發(fā)“顯示顯示”菜單項(xiàng)的功能。菜單項(xiàng)的功能。 打開(kāi)打開(kāi)resourceviewacceleratoridr_mainframe,會(huì)看到一張,會(huì)看到一張加速鍵列表,在

21、列表的最后高亮區(qū)域雙擊,會(huì)彈出加速鍵列表,在列表的最后高亮區(qū)域雙擊,會(huì)彈出accel properties對(duì)話框。對(duì)話框。id選擇選擇id_oper_show(或直接填寫(xiě))。然(或直接填寫(xiě))。然后單擊后單擊next key typed按鈕,會(huì)彈出一個(gè)對(duì)話框,提示按下對(duì)應(yīng)按鈕,會(huì)彈出一個(gè)對(duì)話框,提示按下對(duì)應(yīng)的加速鍵,這里按下的加速鍵,這里按下ctrl+w,則,則vc ide會(huì)自動(dòng)為你設(shè)置好會(huì)自動(dòng)為你設(shè)置好key、modifiers和和type三個(gè)屬性。三個(gè)屬性。 2210.2.4工具條資源的創(chuàng)建及其使用工具條資源的創(chuàng)建及其使用 在在windows應(yīng)用程序中,工具條可以看作是應(yīng)用程序中,工具條可以

22、看作是圖形化的菜單,是一種更快捷、更有效、更圖形化的菜單,是一種更快捷、更有效、更直觀的人機(jī)交互方式。直觀的人機(jī)交互方式。 1 工具條類的層次位置及其常用方法工具條類的層次位置及其常用方法 工具條由工具條由cwnd類類派生的,它們都連派生的,它們都連接到一個(gè)接到一個(gè)windows應(yīng)用程序窗口。因應(yīng)用程序窗口。因此,此,cwnd的所有的所有功能如創(chuàng)建、移動(dòng)、功能如創(chuàng)建、移動(dòng)、顯示和隱藏窗口等顯示和隱藏窗口等在用控制條工作時(shí)在用控制條工作時(shí)都是可用的。都是可用的。23create():創(chuàng)建一個(gè)工具條并把它附加到:創(chuàng)建一個(gè)工具條并把它附加到ctoolbar對(duì)象上對(duì)象上createex():創(chuàng)建一個(gè)定

23、義了邊界的工具條并附加到:創(chuàng)建一個(gè)定義了邊界的工具條并附加到ctoolbar對(duì)象上對(duì)象上setsizes():設(shè)置按鈕及位圖大小:設(shè)置按鈕及位圖大小setheight():設(shè)置工具條的高度:設(shè)置工具條的高度loadtoolbar():裝載工具條資源:裝載工具條資源loadbitmap():裝載包含工具按鈕圖像的位圖:裝載包含工具按鈕圖像的位圖setbitmap():設(shè)置位圖圖像:設(shè)置位圖圖像setbuttons():設(shè)置按鈕并使每個(gè)按鈕與位圖圖像相關(guān):設(shè)置按鈕并使每個(gè)按鈕與位圖圖像相關(guān)ctoolbar的構(gòu)造方法的構(gòu)造方法 24(1)增加工具條資源增加工具條資源 insert resource

24、toolbar new插入新的工插入新的工具條資源。具條資源。(2)將工具條添加到窗口中將工具條添加到窗口中添加后,需把工具條的對(duì)象加入到應(yīng)用程序框架添加后,需把工具條的對(duì)象加入到應(yīng)用程序框架窗 口 中窗 口 中 ( c m a i n f r a m e ) 。 在 應(yīng) 用 程 序 的。 在 應(yīng) 用 程 序 的cmainframe類中加入工具條對(duì)象類中加入工具條對(duì)象m_wndtoolbarprotected:ctoolbar m_wndtoolbar; /自己定義的工具條自己定義的工具條2 加入用戶自定義的工具條加入用戶自定義的工具條 25 在框架窗口類的在框架窗口類的oncreate()函

25、數(shù)中調(diào)用工具條類函數(shù)中調(diào)用工具條類的的create()或或createex()成員函數(shù)創(chuàng)建該工具條,成員函數(shù)創(chuàng)建該工具條,并調(diào)用并調(diào)用loadtoolbar()成員函數(shù)將工具條對(duì)象和成員函數(shù)將工具條對(duì)象和前面創(chuàng)建的工具條資源連接在一起。前面創(chuàng)建的工具條資源連接在一起。if(!m_wndtoolbar.create(this,ws_visible|cbrs_top) |!m_wndtoolbar.loadtoolbar(idr_toolbar)/引入資源引入資源idr_toolbartrace0(failed to create toolbarn);return -1; / fail to cr

26、eate263 對(duì)工具條進(jìn)行操作對(duì)工具條進(jìn)行操作 創(chuàng)建完成工具條后,可調(diào)用工具條類中的成員函創(chuàng)建完成工具條后,可調(diào)用工具條類中的成員函數(shù)對(duì)工具條進(jìn)行操作,例如設(shè)定工具條風(fēng)格,在窗口數(shù)對(duì)工具條進(jìn)行操作,例如設(shè)定工具條風(fēng)格,在窗口中移動(dòng)工具條,控制工具條的顯隱等。中移動(dòng)工具條,控制工具條的顯隱等。 當(dāng)鼠標(biāo)光標(biāo)在按鈕上暫停時(shí),顯示工具提示和命當(dāng)鼠標(biāo)光標(biāo)在按鈕上暫停時(shí),顯示工具提示和命令描述,并設(shè)定工具條的大小是可變的。令描述,并設(shè)定工具條的大小是可變的。m_wndtoolbar.setbarstyle(cbrs_tooltips | cbrs_flyby | cbrs_size_dynamic);

27、可在程序中設(shè)置允許用戶在程序運(yùn)行中在框架窗口內(nèi)可在程序中設(shè)置允許用戶在程序運(yùn)行中在框架窗口內(nèi)移動(dòng)工具條。這是通過(guò)調(diào)用移動(dòng)工具條。這是通過(guò)調(diào)用ctoolbar:enabledocking和和cframe:enabledocking來(lái)實(shí)現(xiàn)的。二函數(shù)原型均如下:來(lái)實(shí)現(xiàn)的。二函數(shù)原型均如下: void enabledocking( dword dwstyle )27【例【例10-4】在【例】在【例10-3】中添加工具條,工具條中包含】中添加工具條,工具條中包含四個(gè)按鈕,分別對(duì)應(yīng)菜單的四個(gè)按鈕,分別對(duì)應(yīng)菜單的“顯示顯示”、“紅色紅色”、“綠綠色色”和和“藍(lán)色藍(lán)色”菜單項(xiàng)。該工具條可以在窗口中任意位菜單項(xiàng)

28、。該工具條可以在窗口中任意位置???,當(dāng)鼠標(biāo)停留在工具條按鈕上時(shí),將顯示該按鈕置???,當(dāng)鼠標(biāo)停留在工具條按鈕上時(shí),將顯示該按鈕的功能。的功能。28 在在resourceview中中加入工具條資源加入工具條資源idr_toolbar_new繪制四個(gè)按鈕并設(shè)置相應(yīng)繪制四個(gè)按鈕并設(shè)置相應(yīng)id。在在mainfrm.h中添加如下代碼,聲明一個(gè)中添加如下代碼,聲明一個(gè)ctoolbar變量變量 ctoolbar m_wndtoolbarnew;在在mainfrm.cpp文件的文件的 int cmainframe:oncreate(lpcreatestruct lpcreatestruct) 函數(shù)中添加如下代碼

29、:函數(shù)中添加如下代碼:if (!m_wndtoolbarnew.createex(this, tbstyle_flat, ws_child | ws_visible | cbrs_top | cbrs_gripper | cbrs_tooltips | cbrs_flyby | cbrs_size_dynamic) |!m_wndtoolbarnew.loadtoolbar(idr_toolbar_new)trace0(failed to create toolbarn);return -1; / fail to create 29 為了使新增的工具條可以在窗口中自由???,在為了使新增的工具條

30、可以在窗口中自由??浚趏ncreate函數(shù)中,還要增加如下代碼:函數(shù)中,還要增加如下代碼:m_wndtoolbarnew.enabledocking(cbrs_align_any); /工具條可以在父窗口內(nèi)任何一邊??抗ぞ邨l可以在父窗口內(nèi)任何一邊??縠nabledocking(cbrs_align_any);/ 父窗口允許子工具條窗口在任何一邊??扛复翱谠试S子工具條窗口在任何一邊??縟ockcontrolbar(&m_wndtoolbarnew);/ 父窗口內(nèi)按照前面指定的風(fēng)格??吭摴ぞ邨l父窗口內(nèi)按照前面指定的風(fēng)格??吭摴ぞ邨l3010.2.5 圖標(biāo)資源的創(chuàng)建及其使用圖標(biāo)資源的創(chuàng)建及其

31、使用 每個(gè)每個(gè)windows應(yīng)用程序在資源管理器中都有應(yīng)用程序在資源管理器中都有自己的圖標(biāo),這個(gè)圖標(biāo)就是自己的圖標(biāo),這個(gè)圖標(biāo)就是icon資源。資源?!纠纠?0-5】在【例】在【例10-4】的基礎(chǔ)上通過(guò)修改光標(biāo)】的基礎(chǔ)上通過(guò)修改光標(biāo)資源,使得執(zhí)行程序的圖標(biāo)變?yōu)槿鐖D所示的資源,使得執(zhí)行程序的圖標(biāo)變?yōu)槿鐖D所示的樣子。樣子。 31 resourceviewiconidr_mainframe,就會(huì)看到,就會(huì)看到圖標(biāo)編輯器,在這里可以選擇圖標(biāo)的尺寸,默認(rèn)的是圖標(biāo)編輯器,在這里可以選擇圖標(biāo)的尺寸,默認(rèn)的是1616和和3232。1616的圖標(biāo)用于程序運(yùn)行時(shí)左上角圖標(biāo)、任務(wù)條圖的圖標(biāo)用于程序運(yùn)行時(shí)左上角圖標(biāo)、

32、任務(wù)條圖標(biāo)、資源管理器的列表和詳細(xì)信息模式;標(biāo)、資源管理器的列表和詳細(xì)信息模式;3232的圖標(biāo)用于程序運(yùn)行時(shí)默認(rèn)對(duì)話框圖標(biāo)、資源的圖標(biāo)用于程序運(yùn)行時(shí)默認(rèn)對(duì)話框圖標(biāo)、資源管理器圖標(biāo)模式;管理器圖標(biāo)模式;4848的圖標(biāo)用于資源管理器的平鋪和縮略圖模式。的圖標(biāo)用于資源管理器的平鋪和縮略圖模式。32單擊單擊new device image按鈕對(duì)光標(biāo)資源進(jìn)行修改按鈕對(duì)光標(biāo)資源進(jìn)行修改3310.2.6 字符串資源的使用字符串資源的使用 字符串資源最主要的用途就是用于程序的多語(yǔ)字符串資源最主要的用途就是用于程序的多語(yǔ)言版本。如果要想動(dòng)態(tài)切換界面語(yǔ)言,使用字符串言版本。如果要想動(dòng)態(tài)切換界面語(yǔ)言,使用字符串資源

33、是很好的選擇。資源是很好的選擇。 在在mfc中,可以通過(guò)中,可以通過(guò)cstring類的類的loadstring方法方法來(lái)從資源載入字符串。來(lái)從資源載入字符串。具體操作是打開(kāi)具體操作是打開(kāi)resourceviewstring table,在表,在表中的空白高亮處雙擊,在彈出的中的空白高亮處雙擊,在彈出的string properties對(duì)對(duì)話框中的話框中的id編輯框中輸入編輯框中輸入ids_string_hello,caption編輯框中輸入編輯框中輸入“hello vc!”。34在在my_resview.cpp文件的構(gòu)造函數(shù)中,將原來(lái)的文件的構(gòu)造函數(shù)中,將原來(lái)的 m_strshow = hel

34、lo world!; 改為:改為:m_strshow.loadstring(ids_string_hello); 這樣我們的程序的輸出就變?yōu)檫@樣我們的程序的輸出就變?yōu)椤癶ello vc!”了了使用字符串資源的好處就是不需使用字符串資源的好處就是不需要在整個(gè)程序中去尋找某個(gè)字符要在整個(gè)程序中去尋找某個(gè)字符串,如果某些字符串可能在將來(lái)串,如果某些字符串可能在將來(lái)會(huì)發(fā)生變更,那么最好將它寫(xiě)在會(huì)發(fā)生變更,那么最好將它寫(xiě)在字符串資源中。字符串資源中。3510.2.710.2.7對(duì)話框資源的創(chuàng)建及其應(yīng)用對(duì)話框資源的創(chuàng)建及其應(yīng)用 【例【例10-610-6】在上例的基礎(chǔ)上編寫(xiě)一個(gè)對(duì)話框用】在上例的基礎(chǔ)上編寫(xiě)一

35、個(gè)對(duì)話框用于接收用戶輸入,然后用這個(gè)輸入來(lái)替換主于接收用戶輸入,然后用這個(gè)輸入來(lái)替換主程序原來(lái)顯示的字符串程序原來(lái)顯示的字符串36在創(chuàng)建完對(duì)話框資源之后,需要生成一個(gè)相關(guān)的對(duì)話在創(chuàng)建完對(duì)話框資源之后,需要生成一個(gè)相關(guān)的對(duì)話框類??蝾悺iewclasswizard create a new class ok,在在name中填入中填入“cinputdlg”即可。即可。37將對(duì)話框上的將對(duì)話框上的idc_edit_input控件與一個(gè)控件與一個(gè)cstring類型的類型的m_strinput變量綁定,建立一種映射關(guān)系。變量綁定,建立一種映射關(guān)系。 上面的操作使上面的操作使mfc在幕后作了些什么在幕后

36、作了些什么? 在在inputdlg.h文件中,文件中,mfc加入了如下代碼:加入了如下代碼: / dialog data/afx_data(cinputdlg)enum idd = idd_dialog_new ;cstringm_strinput;/afx_data38 在在inputdlg.cpp的構(gòu)造函數(shù)中,的構(gòu)造函數(shù)中,mfc加入了如下代碼:加入了如下代碼: /afx_data_init(cinputdlg) m_strinput = _t();/afx_data_init 在在inputdlg.cpp文件的文件的dodataexchange函數(shù)中,函數(shù)中,mfc加加入了如下代碼:入了

37、如下代碼: /afx_data_map(cinputdlg) ddx_text(pdx, idc_edit_input, m_strinput);/afx_data_map在函數(shù)在函數(shù)ddx_text調(diào)用中,完成了控件與變量之間調(diào)用中,完成了控件與變量之間的數(shù)據(jù)交換。的數(shù)據(jù)交換。對(duì)對(duì)m_strinput的初始化的初始化39下面要在下面要在cmy_resview中使用新創(chuàng)建的對(duì)話框中使用新創(chuàng)建的對(duì)話框 首先為首先為“操作操作”菜單增加菜單項(xiàng)菜單增加菜單項(xiàng)“修改字符串修改字符串”,其,其id為為id_oper_string。增加。增加command消息響應(yīng)函數(shù)消息響應(yīng)函數(shù)onoperstring。然后在。然后在my_resview.cpp文件頭部文件頭部include部分最后加入:部分最后加入:#include inputdlg.h在在onoperstring中加入如下代碼:中加入如下代碼:void cmy_resview:onoperstring() cinputdlg dlginput; / 聲明對(duì)話框變量聲明對(duì)話框變量 if(dlginput.domodal() = idok) / 如果用戶點(diǎn)擊如果用戶點(diǎn)擊ok按鈕按鈕 m_strshow = dlginput.m_strinput;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論