1

GET_WHEEL_DELTA_WPARAM から返された正の数値しか表示されません。マウス ホイールを自分の方に回転させたときに負の数値になるはずです。

case WM_MOUSEWHEEL:
            short wheel_delta = 0;
            wheel_delta = GET_WHEEL_DELTA_WPARAM(Addtl_Info_L);

また、このページでは、ホイールを前方に回転させると正の数が得られ、後方に回転させると負の数が得られることを示していますが、このページ、前後ではなく左右であることを示しています。

完全なメッセージ ハンドラは次のとおりです。

            LRESULT CALLBACK Message_Handler(HWND App_Handle, UINT Message_Type, WPARAM Addtl_Info_W, LPARAM Addtl_Info_L) {
                short wheel_delta(0);
                switch(Message_Type) {
                case WM_MOUSEWHEEL:
                    wheel_delta = GET_WHEEL_DELTA_WPARAM(Addtl_Info_L);
                    if (wheel_delta > 0) {
                        std::wostringstream outs;  
                        outs << "Wheel delta is positive" << std::endl;
                        OutputDebugString(outs.str().c_str());
                        graphics_manager.camera_tilt = graphics_manager.camera_tilt + 0.1f;
                    } else if (wheel_delta < 0) {
                        std::wostringstream outs;  
                        outs << "Wheel delta is negative" << std::endl;
                        OutputDebugString(outs.str().c_str());
                        graphics_manager.camera_tilt = graphics_manager.camera_tilt - 0.1f;
                    }
                    return 0;
                }
                return DefWindowProc(App_Handle, Message_Type, Addtl_Info_W, Addtl_Info_L);
            }
4

2 に答える 2

2

を に渡してLPARAMGET_WHEEL_DELTA_WPARAMます。WPARAM(Addtl_Info_Wではなく)を渡す必要がありますAddtl_Info_L

于 2013-03-20T18:30:24.027 に答える
1

メッセージループ全体、または少なくとも「Addtl_Info_L」が定義されている場所を表示する必要があります。これは、wParam「win32msg->wParam」である必要があるためです。

#define GET_WHEEL_DELTA_WPARAM(wParam) ((short)HIWORD(wParam)) 

テストで short 値を unsigned int に変換したり、unsigned フォーマット文字列を使用して short 値を出力したりしていませんか? 条件を使用して否定を確認して確認できます。

if(wheel_delta < 0) { /* do something */ }
于 2013-03-20T16:36:10.077 に答える