1

私は現在、WindowsXP用のC++アプリケーションのようなゲーム内でマウスカーソルを変更することをいじっています。

使用しているカーソルを変更し、SetCursor()機能している目的のカーソルを渡します。ただし、と呼ばれるwhileループの間PeekMessage()、カーソルはデフォルトの矢印にリセットされ続けます。

これは問題のあるループです:

MSG  msg;
while( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
    TranslateMessage( &msg );
    DispatchMessage( &msg );
}

デバッグ中に、呼び出し中にカーソルが変更され、PeekMessage()その後msg.message == 0x200になることがわかりました。これにより、メッセージは次のいずれかになります。

WM_MOUSEFIRST = 0x200
WM_MOUSEMOVE = 0x200

なぜこれが起こっているのかについての情報を見つけることができず、Windowsメッセージの経験もありません。

ありがとう。

編集:

ここによると、システムはマウスが移動するたびにクラスカーソルを再描画し、効果的にデフォルトカーソルに戻します。これを念頭に置いて、これをウィンドウメッセージコールバック関数に追加しました。

case WM_SETCURSOR:
    return 0;

問題が解決しました。

4

1 に答える 1

0

どのようにそれをデバッグしましたか?SoftIceまたはWindowsマウスポインターを共有しない他のアプリケーションを使用しない限り、デバッガーをアプリケーションから分離することは困難です。

于 2009-12-04T01:55:36.380 に答える