上一篇文章介紹了:如何創(chuàng)建一個(gè)最簡(jiǎn)單的Windows窗體應(yīng)用程序。
按照上一篇文章的介紹,我們的HelloApp項(xiàng)目對(duì)應(yīng)如下的窗體應(yīng)用程序:

這一篇文章中,我們將在這個(gè)程序的基礎(chǔ)上,介紹如何在項(xiàng)目中添加資源文件,完成對(duì)程序圖標(biāo)的修改。
最終期望得到的效果為:

明確了目標(biāo),下面我們開始正式介紹。
程序是如何加載圖片的?
我們往項(xiàng)目中添加圖片/圖標(biāo)/光標(biāo)等資源文件的目的就是在程序中將其顯示出來。為了更好的理解如何在項(xiàng)目中添加資源文件,我們先來看看在下面的兩個(gè)程序中是如何加載資源圖片的。
1.HelloApp
還從HelloApp項(xiàng)目入手,回憶下我們是如何設(shè)置程序窗體的圖標(biāo)的?
上文我們介紹過,WinMain函數(shù)是程序的入口,在此函數(shù)中我們要定義窗口類結(jié)構(gòu)WNDCLASSEX。而此結(jié)構(gòu)包含關(guān)于窗口的信息,例如應(yīng)用程序圖標(biāo)、窗口背景色、標(biāo)題欄中顯示的名稱、窗口過程函數(shù)的名稱等。
我們可以在WinMain函數(shù)中找到設(shè)定應(yīng)用程序圖標(biāo)的這行代碼:
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_application));可以看到,LoadIcon函數(shù)用于加載圖標(biāo),代碼中指定使用IDI_APPLICATION作為應(yīng)用程序圖標(biāo),而通過觀察定義我們會(huì)發(fā)現(xiàn)IDI_APPLICATION僅僅對(duì)應(yīng)一個(gè)整形的數(shù),它是如何與一個(gè)圖標(biāo)對(duì)應(yīng)上的呢?我們?cè)倏匆粋€(gè)例子
2.象棋小巫師
象棋小巫師是一個(gè)開源的象棋AI程序,它最早版本的窗體界面如下:
顯然這個(gè)象棋程序的界面是通過已有的圖片資源繪制上去的。
如果去追溯它的源碼可以發(fā)現(xiàn),它是通過類似于下面這行代碼來將資源中的圖片加載到程序中的:
LoadImage(Xqwl.hInst, MAKEINTRESOURCE(IDB_BOARD), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_SHARED);其中IDB_BOARD標(biāo)識(shí)的是整個(gè)棋盤對(duì)應(yīng)的圖片,通過查找定義可以看到。IDB_BOARD被定義在名為resource.h的頭文件中,截圖如下:
可以看到IDB_BOARD仍然僅僅對(duì)應(yīng)了一個(gè)整形的數(shù),它是如何與圖片關(guān)聯(lián)上的呢?
在解決方案資源管理器中,我發(fā)現(xiàn)資源文件下有一個(gè)拓展名為.rc的文件:
它很有可能就是我們要找的答案,查看其代碼:
我們欣喜的在拓展名為.rc的文件中發(fā)現(xiàn)了IDB_BOARD這個(gè)變量,并且發(fā)現(xiàn)了疑似文件路徑的字符串。
我們按照這個(gè)路徑線索去尋找,發(fā)現(xiàn)正是我們想要的那張圖片:
通過我們一系列不嚴(yán)謹(jǐn)?shù)那笾剿鳎覀儼l(fā)現(xiàn)了資源圖片使用原理:
程序通過一個(gè)resource.h文件和項(xiàng)目的.rc文件配合來完成圖片資源的加載。
程序員只需向相應(yīng)的函數(shù)(例如LoadImage)提供resource.h中定義的整形變量(例如IDB_BOARD)
整形變量IDB_BOARD具體對(duì)應(yīng)的資源文件是什么是通過.rc文件控制的。
如何添加資源文件?
明白了Win32應(yīng)用程序資源文件的使用原理,我們來看看如何添加資源文件?
也就是我們?nèi)绾蝸砩蓃esource.h文件和項(xiàng)目的.rc文件
我們打開上一文介紹的HelloApp項(xiàng)目(我僅以它為例說明,你可選擇在任意項(xiàng)目上完成下面的操作)
1.準(zhǔn)備資源文件
為了完成我們的測(cè)試你需要在項(xiàng)目中新建一個(gè)用于存放資源的文件夾,隨便找?guī)讖垐D片放進(jìn)去即可。
可以看到,我在RES文件夾中準(zhǔn)備了一些圖片、視頻和圖標(biāo)文件。
2.添加資源
在解決方案資源管理器中,右鍵資源文件->單擊添加->單擊資源
完成后會(huì)跳出如下的界面
雖然什么都還沒做,此時(shí)你已經(jīng)可以看到,在解決方案資源管理器中,我們的IDE,也就是VS已經(jīng)幫我們生成了resource.h和HelloApp.rc文件,盡管現(xiàn)在還沒有什么實(shí)質(zhì)性的內(nèi)容。
選擇圖標(biāo)選項(xiàng)Icon,然后單擊導(dǎo)入,將我們?cè)赗ES文件夾中準(zhǔn)備的圖標(biāo)文件導(dǎo)入。
成功后,我們可以分別在resource.h和HelloApp.rc中看到:
可以看到,VS已經(jīng)幫我們生成了相應(yīng)的代碼,我們可以使用整形變量IDI_ICON1來標(biāo)識(shí)我們選擇的對(duì)應(yīng)圖標(biāo)了。
如果我們想要自己命名呢?只需直接修改resource.h和HelloApp.rc相應(yīng)位置,只要這兩個(gè)文件能夠?qū)?yīng)即可。
我將變量名修改為了IDI_XQ。
隨后,找到WndMain函數(shù)中用于描述窗體信息的WNDCLASSEX結(jié)構(gòu)對(duì)應(yīng)的那部分代碼,我們稍作修改:
我們重新指定了應(yīng)用程序的圖標(biāo),重新生成項(xiàng)目,就得到了我們期望的結(jié)果:
到此就介紹完畢了。如果你想向資源文件中添加圖片/光標(biāo)文件等,方法是完全類似的。
希望閱讀本文能讓你有所收獲,本文中錯(cuò)誤的地方還望指正。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注