Windowsコード集 | 上のページ |
NT4.0以降では WM_MOUSEWHEELでホイールメッセージが検出できるようですが、Win95等ではそれができません。
(たぶん、Win98では対応してるでしょうけど……)
という事で、ホイールマウスを対応させる方法を以下に書いておきます。
クラスにして隠蔽するほど難しい物では無いですけど、この方が何かと便利です。//---------------------------------------------------------------------------- // wheelmouse.h //---------------------------------------------------------------------------- #ifndef _INC_WHEELMOUSE_H_ #define _INC_WHEELMOUSE_H_ #ifndef WM_MOUSEWHEEL #include "zmouse.h" #endif class CWheelMouse{ private: static UINT m_wm_message; public: UINT TranslateMessage(UINT msg){ if(m_wm_message == msg)msg = WM_MOUSEWHEEL; return msg;} BOOL IsForward(WPARAM wparam){return ((short)HIWORD(wparam) < 0);} }; #endif //---------------------------------------------------------------------------- // wheelmouse.cpp //---------------------------------------------------------------------------- #include "windows.h" #include "windowsx.h" #include "wheelmouse.h" UINT CWheelMouse::m_wm_message = (((GetVersion() & 0x80000000) && LOBYTE(LOWORD(GetVersion()) == 4)) || (!(GetVersion() & 0x80000000) && LOBYTE(LOWORD(GetVersion()) == 3))) ? RegisterWindowMessage(MSH_MOUSEWHEEL) : 0;
このクラスの使い方は以下の通り。
// クラスの生成(グローバル変数として置いてください) CWheelMouse wmouse; // メッセージを変換する // // WindowProcコールバックもしくは、DialogProcコールバックの先頭で // 該当メッセージを変換してやります。 // 以下は、WindowProcの例です。 // LRESULT CALLBACK WindowProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam) { switch(wmouse.TranslateMessage(msg)){ // <- WM_MOUSEWHEELを検出できるように、 // メッセージを変換します case WM_MOUSEWHEEL: // ホイール通知メッセージ if(wmouse.IsForward(wparam)){ /* ホイールを手前に動かしたとき */ }else{ /* ホイールを外側に動かしたとき */ } break; default: return DefWindowProc(hwnd,msg,wparam,lparam); } return 0; }
上のページ |