2012-09-11 29 views
1

我想創建工具欄項目並從程序存儲器中的圖像而不是從磁盤上的文件中繪製它們。我寧願使用資源文件(.rc)來嵌入圖像,但如果我需要以某種方式推出自己的圖片,那也可以。wxWidgets - 如何嵌入.ico和.png圖像並用於繪製工具欄項目

圖像文件是.ico和.png。

假設我可以使用.rc文件中的內容,該如何完成此代碼?

void MyFrame::AddToolBarItem(int ID, wxSize sz, const char* file, const char* short_help, const char *long_help) { 
    const char *end = file+strlen(file); 
    const char *dot = std::find(file, end, '.'); 
    if(dot != end) { 
     // It's an external file, with an extention, like .ico or .png 
     wxImage im(file); 
     im.Rescale(sz.x, sz.y, wxIMAGE_QUALITY_HIGH); 
     wxBitmap bmp(im); 
     my_tool_bar->AddTool(ID, short_help, bmp, long_help); 
    } else { 
     // It's a resource 
     // What now, StackOverflow??? 
    } 
} 

編輯:好的,我會讓它更容易。忘記重新調整。我可以用Gimp圖片編輯器來做到這一點。假設圖像尺寸合適。你也可以假設他們是.ico或任何格式的wxWidgets都很方便。編輯2:我接受了一個答案,但我決定最好只是「手工」嵌入圖像,完全避免.rc的概念。我寫了一個小程序用靜態初始化器創建一個.cpp文件,但是可以在網上找到它們。當編譯到程序中時,.cpp文件將在只讀存儲器中創建映像文件的副本。 .rc文件是一個特定於Windows的東西,因此避免將它用於自定義圖標和光標以提高可移植性是個好主意。但是,在MS項目中只包含一行「#include < wx/msw/wx.rc>」的.rc文件是有意義的。「這將允許訪問某些缺省可用的庫存遊標等等在其他平臺上。

回答

1

Bitmaps and Icons overview給出了一個很好的解釋。基本上,一旦你在你的rc文件嵌入的資源,所有你需要做的是:

wxBitmap bmp(wxBITMAP(bmpnameinrcfile)); 

同樣爲ICO

wxIcon icon(wxICON(iconameinrcfile)); 
+0

對不起,但那不行。彈出堆棧跟蹤對話框,並且圖像無法加載。我已經打了一個幾乎解決方案,即wxBitmap bmp(wxString(file),wxBITMAP_TYPE_ICO_RESOURCE);還有一個問題 - 我後來發現一個可怕的堆棧跟蹤對話框是一個警告。但它警告wxWidgets代碼中的某些內容,而不是我所做的任何可疑事情。我修改了核心項目image.cpp中的代碼,重新編譯了wxWidgets,並提交了錯誤票據http://trac.wxwidgets.org/ticket/14643 –