ホイールを使ってズームイン&アウト

wheel.png

WinAPIの場合

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
case WM_MOUSEWHEEL://マウスホイール
        cdbg<<"GET_WHEEL_DELTA_WPARAM="<<GET_WHEEL_DELTA_WPARAM(wp)<<",high="<<HIWORD(wp)<<endl;
        OutputDebugString(cdbg.str().c_str());
        return 0;
        }

wpの上位ビットがホイールの方向を示す。
前にホイールすると、120
後ろにホイールすると-120
たまーに240とかなるんだけど、たまにすぎて、わからない。
の値になる。

存在確認

BOOL IsMouseWheelPresent()
{
    return (GetSystemMetrics(SM_MOUSEWHEELPRESENT) != 0);
}

参照元:MSDN

GLFWの場合

glfwGetMouseWheel()

intの値が返る。
最初の状態は0
そして、好きなだけ大きな数増えたり減ったりする。
前にホイールすると、+
後ろにホイールすると-
glfw3からglfwGetCursorPosに名前が変わった!!

GLUTの場合

コールバック関数

void wheel(int wheel_number,int direction,int x,int y){
    gZoom-=(float)direction*0.1;
    glutPostRedisplay();
}

directionは手前で-1 奥に向かって転がすと1になる。

main()関数にて

glutMouseWheelFunc(wheel);

display()関数にて

    gModelView.LoadIdentity();
    gModelView.gluLookAt(0,0,gZoom, 0,0,0, 0,1,0);//gZoom初期値は-5
    gModelView.MultMatrix(&rotation);
    gIniCam.Create(0,0,gZoom,1.0);
    gModelView.MultVector(&gIniCam,&gLocalCoordCam);//CVertex gIniCam(0,0,gZoom,1.0);
    gLocalCoordCam=-gLocalCoordCam;

サポートサイト Wikidot.com