1

ツールバー項目を作成し、ディスク上のファイルからではなく、プログラムメモリ内の画像からペイントしたいと思います。リソースファイル(.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ファイルを含めることは理にかなっています。これにより、デフォルトで使用可能な一部のストックカーソルなどにアクセスできるようになります。他のプラットフォームで。

4

2 に答える 2

1

ビットマップとアイコンの概要は、これについてかなり良い説明を提供します。基本的に、リソースを.rcファイルに埋め込んだら、実行する必要があるのは次のとおりです。

wxBitmap bmp(wxBITMAP(bmpnameinrcfile));

icoについても同様です

wxIcon icon(wxICON(iconameinrcfile));
于 2012-09-11T07:30:16.663 に答える
1

wx自体のリソースからPNGをロードすることはサポートされていませんが、コードで簡単にロードできます。http://wiki.wxwidgets.org/Embedding_PNG_Images#Embedding_PNG_images_into_Windows_rc_fileを参照してください。

于 2012-09-11T10:23:43.010 に答える