2010-11-21 8 views
0

マウス(たとえば回転ノブ)でドラッグすると変更されるビットマップを使用してコントロールを作成するにはどうすればよいですか?これはWin32 APIを使用していますか?ビットマップを使用したコントロール

+0

マウスイベントを処理して表示を更新することで、これを自分で行う必要があります。これについて具体的な質問がある場合は、質問を更新してください。 – casablanca

+0

はい、私はこれまでのところでした。しかしどうですか?その上にビットマップを持つ静的コントロールを使用する必要がありますか?そして、私はマウスイベントをどのように処理できますか? – Midas

答えて

2

コントロールのウィンドウプロシージャでWM_MOUSEWHEELメッセージを認識するコードを記述します。

0

以下は、単純なゲームで見られる典型的なループです。 「もし」、あなたができるようになります行うことよりも、このようにそれを行うには優れている、

while(!quit) { 
    while(evt = events_left_for_processing) { 
     react_to_event(evt); 
    } 

    draw_frame(); 
} 

が第二「しばらく」に特別な注意を払ってください:それは良い習慣ではないですが、ときに良い基盤を構築します結合された事象をより正確に処理する。あなたは、時間ベースの物理学を必要とするかもしれないし、それが(アキュムレータを使用して)複雑になるしばらく

..私は書いていたという単純なゲームからのサンプル:

/* Time-based animation loop. 
* Accumulator idea picked from an article by Glenn Fiedler on gafferongames.com */ 
while(!done) { 
    /* Input */ 
    while(SDL_PollEvent(&evt)) { 
     window_event(evt, &done); 
    } 

    /* Physics */ 
    newTime = time(); 
    deltaTime = newTime - currentTime; 

    if(deltaTime > 0.0f) { 
     currentTime = newTime; 
     accumulator += deltaTime; 
     while(accumulator >= dt) { 
      window_update(t, dt); 
      accumulator -= dt; 
      t += dt; 
     } 
    } 

#ifdef FPS_CAPPED 
    drawTime = newTime - currentDrawTime; 
    /* Draw */ 
    if(drawTime >= FPS_CAPPED) { 
     currentDrawTime = newTime; 
#endif 
     window_draw(); 
     SDL_GL_SwapBuffers(); 
#ifdef FPS_CAPPED 
    } 
#endif 
} 

window_updateなどが一般的な機能である(彼らは関数ポインタを使用してゲーム状態で関数を実行する)。
イベントハンドラで四角形の変形が変更されます。このハンドラはmouse_moveイベントを捕まえ、mouse_press/releaseイベントを捕捉する状態を持っています。 更新では、四角の位置/ etcデータを変更します。 の場合は、ルーチンを描画すると、四角形がブリットされます。 (レンダリングパイプラインで行列変換を使用するOpenGLのような他のフレームワークを使用しない限り)