同じ基本クラスから継承された 2 つのクラスがあります。これはゲーム ループ用であり、現在の「状態」に応じて、CALLBACK メソッドでアクティブ オブジェクトへのポインターを送信する必要がありますが、そうではありません。2 番目のオブジェクトのポインターのみを送信します。
最初に PostMessage() を介して ObjectA を設定し、次に ObjectB を設定すると、ObjectB が機能しなくなり、そのオブジェクトへのポインターが取得されません。
逆に設定すると、ObjectB は機能しますが、ObjectA は機能しません。
これはループの一般的なレイアウトです: (何が欠けているのでしょうか?)
ゲームループ:
PostMessage( hwnd, WM_USER, 0, (LPARAM)&ObjectA );
PostMessage( hwnd, WM_USER, 0, (LPARAM)&ObjectB );
while(running)
{
while( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )
{
/* ... */
}
if (STATE == StateA)
Update(&ObjectA);
if (STATE == StateB)
Update(&ObjectB);
}
コールバック メソッドで:
static ObjectA* objA;
static ObjectB* objB;
if (objA || objB)
{
// Do stuff to objA or objB
}
else
switch(msg)
{
case WM_USER:
if (STATE == StateA)
objA = (ObjectA*) lparam;
if (STATE == StateB)
objB = (ObjectB*) lparam;
break;
// default and WM_CLOSE
}
}