2017-11-16 11 views
0

にwxBitmapの更新:私は、単一のwxButtonを使用していwxBitmap

wxButtonAction::wxButtonAction(wxWindow* parent) : wxButton(parent,wxID_ANY) { 
#if defined __WXMSW__ 
    wxIcon ms_icon(wxT("START_ICON"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16); 
    wxBitmap button_bmp; 
    button_bmp.CopyFromIcon(ms_icon); 
#else 
    wxFileName icon_path(DATA_DIR, wxT("start.ico")); 
    wxBitmap button_bmp(icon_path.GetFullPath(), wxBITMAP_TYPE_ICO); 
#endif 
    SetLabel(_("&Start")); 
    SetBitmap(button_bmp); 
} 

bitmapedボタンが期待通りに表示されています。このメソッドは、ユーザーがそのボタンをクリックしたときに、私は、ビットマップとラベルの両方を変更することができます:

void wxButtonAction::updateOnAction(bool isRunning) { 
#if defined __WXMSW__ 
    wxIcon ms_icon((isRunning) ? wxT("STOP_ICON") : wxT("START_ICON"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16); 
    wxBitmap button_bmp; 
    button_bmp.CopyFromIcon(ms_icon); 
#else 
    wxFileName icon_path(DATA_DIR, (!isRunning) ? wxT("stop.ico") : wxT("start.ico")); 
    wxBitmap button_bmp(icon_path.GetFullPath(), wxBITMAP_TYPE_ICO); 
#endif 
    SetLabel((!isRunning) ? _("&Stop") : _("&Start")); 
    SetBitmap(button_bmp); 
} 

となりましリソースファイル:

AAPP_ICON ICON DISCARDABLE "../data/app.ico" 
ABOUT_ICON ICON "../data/about.ico" 
CLOSE_ICON ICON "../data/close.ico" 
START_ICON ICON "../data/start.ico" 
STOP_ICON ICON "../data/stop.ico" 

1 24 "../data/manifest.xml" 

ラベルは、ユーザーのトグルボタンをクリックするとpropertly変更しましたが、されていませんアイコンは常に「開始」ビットマップにあります。他のプラットフォームの下で、彼らはまったく同じことだから、私は(wxBitmapからwxIconからの暗黙的な変換がMSWの下にあり、あなたはまったくCopyFromIcon()を使用する必要はありませんすべてのアイコンが同じフォルダに存在すること

答えて

0

を確認することができます)。これは明らかに明示的に呼び出す必要があるため、問題が何であるかは不明です。

私は、他に2つのことをお勧めしたいと思います。まず、ICOにPNG(実際のアルファ透明度あり)を使用することをお勧めします。プリプロセッサのチェックを避けるには、wxBITMAP_PNG()が便利です。

第2に、.rcファイルからマニフェスト行を削除し、代わりに#include "wx/msw/wx.rc"を追加してください。これはマニフェストのための正しいことを行い、wxWidgetsアプリケーションが必要とする他のものを定義します。

+0

wxBITMAP_PNGに関するヒントをお寄せいただきありがとうございます。本当にコード行を減らしてください。しかし、アイコンがユーザーのクリックにスワップすることはありません。 – Joel

+0

私はあなたのコードで何か間違っているとは思わない、 'SetBitmap()'イベントハンドラの外側からビットマップを停止して呼び出してみてください、それは動作しますか?たぶん、ビットマップに何か問題がありますか? –

関連する問題