TwAddVarCBコールバック関数

twaddvarcb.png
cbbutton.png

AnttTweakBarでコールバック関数を使う場面

  • TwAddVarCB
  • TwAddButton

である。

TwAddVarCB(bar, "名前", TW_TYPE_INT32, setCallback, getCallback, &clientData,  " label='callback' min=1 max=50 ");

clientDataには自作オブジェクトなどを入れることができる。
callback.png
見た目はこんなふうで、変数がちょっとずつ変わる形式

ボタンの場合

TwAddButton(bar, "reset", Reset, g_Render," label='reset anime' group=Wind");

cbbutton.png
見た目はこんなふう

コールバック関数の形

引数の名前は好きに変えて構わない。
ただし、型はこの形式を守ること

void TW_CALL 関数名(const void *value, void *clientData)
{
}

SetCBでは値をセットすることができる。
void TW_CALL SetCB(const void *value, void *clientData)
{
    (void)clientData; // unused
    int val = *(const int *)value; // copy value to g_AutoRotate
    cout<<"SetCB"<<val<<endl;
 
}

getのコールバックは、barを触ってるあいだじゅう呼ばれる。
表示する数値を決めているようだ。
void TW_CALL GetCB(void *value, void *clientData)
{
    (void)clientData; // unused
    int i=0;
    *(int *)value = i; // copy g_AutoRotate to value
     cout<<"GetCB"<<i<<endl;
}

ボタンのコールバック

ボタンのコールバックはvoid*の引数一個だけ。

void __stdcall BottumCB(void* _myobj){
    cout<<"ボタンを押しました!"<<endl;
}

そしてこの引数には自作オブジェクトを入れることができる。

自作クラスの関数をコールバック内で呼びたい場合

こんなふうにする

void TW_CALL Reset(void *_render){
    CCloudRender *render = static_cast<CCloudRender *>(_render);
    render->Reset();
 
}
//たとえばボタンのコールバックとして
TwAddButton(bar, "reset", Reset, g_Render," label='reset anime' group=Wind");

TWCALLとはなにか

__stdcallと同じである。

#if (defined(_WIN32) || defined(_WIN64)) && !defined(TW_STATIC)
#   define TW_CALL          __stdcall
#   define TW_CDECL_CALL    __cdecl
#   define TW_EXPORT_API    __declspec(dllexport)
#   define TW_IMPORT_API    __declspec(dllimport)
#else
#   define TW_CALL
#   define TW_CDECL_CALL
#   define TW_EXPORT_API
#   define TW_IMPORT_API
#endif

callback

サポートサイト Wikidot.com callback