2016-11-07 39 views
0

無限ループ中に何が起こっているかによって画像が変化するウィンドウが必要です。StaticBitmapの画像を変更するwxWidgets

誰かが歩き回っているときに、特定のトラックを離れると、プログラムはトラックの方向に向かって矢印を表示するはずです。したがって、私はユーザーとトラックの間の距離を決定するプログラムを持っていますが、イメージの更新方法についてはわかりません。

私はwxWidgetsでcode :: blocksを使用し、wxStaticBitmapクラスを使用する必要があると思います。デフォルトでは

while(true) 
{ 
    updatePosition(); 
    if(userNotOnTrack) 
    { 
     if(trackRightOfUser) 
     { 
      StaticDirectionBitmap->SetBitmap("D:\\WindowsDgps\\WindowsDgpsGraphic\\arrow_right.png"); 
     } 
    } 
} 

(このスニペットがStaticDirectionBitmap一部を除き、ほとんどが擬似コードであることに注意してください。)

:(。より良い方法があれば、教えてください)

を私はしてみましたビットマップには「no_arrow」画像があります。これでエラーが発生します:error: no matching function for call to 'wxStaticBitmap::SetBitmap(const char [51])'|。私はこれがうまくいかないことを文書から見ていますが、私は何ができるか分かりません。

これをどのように処理するか知っている人は、喜んで聞いてください。私はC#で何か似たようなことを試してみて、スレッドの安全性のために完全に失敗した数年前に覚えています... wxWidgetsを使ってC++でこれが難しくないことを願っています。

答えて

2

SetBitmapは文字列ではなくwxBitmapパラメータをとります。

wxImage::AddHandler(new wxPNGHandler); 

または

::wxInitAllImageHandlers(); 
:前PNGハンドラは、次のいずれかのような呼び出しで追加されたことを、この呼び出しを行うに確認してください

SetBitmap(wxBitmap("D:\\WindowsDgps\\WindowsDgpsGraphic\\arrow_right.png", wxBITMAP_TYPE_PNG)); 

:だからコールは次のようになります

これを行う最も簡単な場所は、アプリケーションのOnInit()メソッドです。

スタティックビットマップをワーカースレッドから更新する場合は、wxThreadEventをスローしてから、イベントハンドラでSetBitmapを呼び出す必要があります。サンプルhereは、これらのイベントを生成して処理する方法を示しています。

関連する問題