ツールバー項目を作成し、ディスク上のファイルからではなく、プログラムメモリ内の画像からペイントしたいと思います。リソースファイル(.rc)を使用して画像を埋め込むことをお勧めしますが、自分でロールする必要がある場合は、それでもかまいません。
画像ファイルは.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???
}
}
編集:さて、私はそれを簡単にします。Rescaleを忘れてください。私はGimp画像エディタでそれを行うことができます。画像が適切なサイズであると想定します。また、それらが.icoまたはwxWidgetsに便利な形式であると想定することもできます。
編集2:私は答えを受け入れていますが、.rcの概念を完全に避けて、「手作業で」画像を埋め込むのが最善であると判断しました。静的初期化子を使用して.cppファイルを作成する小さなプログラムを作成しましたが、ネット上で見つけることができます。プログラムにコンパイルすると、.cppファイルは読み取り専用メモリにイメージファイルのコピーを作成します。.rcファイルはWindows固有のものであるため、移植性のために、カスタムアイコンやカーソルに使用しないことをお勧めします。ただし、MSプロジェクトに「#include <wx / msw / wx.rc>」という行のみを含む.rcファイルを含めることは理にかなっています。これにより、デフォルトで使用可能な一部のストックカーソルなどにアクセスできるようになります。他のプラットフォームで。