• ベストアンサー

MFCのイベント処理について

MFCのイベント処理でOnLButtonDwonとOnRButtonDownの2つにそれぞれの描画処理を割り当てて、マウスをドラッグ(OnMouseMove)しているときにぞれぞれのボタンの処理を呼び出す時はどうすればいいでしょうか。

  • tnk48
  • お礼率9% (7/76)

質問者が選んだベストアンサー

  • ベストアンサー
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

分かりやすいようにLボタンのみの場合の描画処理の流れを書きます。Rボタンの処理は単に同じことを追加するだけです。 (0) まず、「Lボタンが押されている」ことを表すフラグを用意する。 (1) OnLButtonDownで(0)のフラグをオンにする。 (2) OnMouseMoveで(0)のフラグを確認し、オンならばボタンが押されているときの描画処理を行う。 (3) OnLButtonUpで(0)のフラグをオフにする。 両方押されていたらどうするか書かれていませんが、必要ならその場合の処理はOnMouseMoveの中で両方のフラグがオンだった場合の処理として書いてください。

tnk48
質問者

お礼

ありがとうございます、ちゃんとできました

関連するQ&A

  • C# イベント処理について

    GUIなどの処理はイベントというのを使っていますが、イベントの実際の内部処理は一体どんな仕組みで動いているのでしょうか。  単純に無限ループをして状態が変化しているかチェックしているのでしょうか。 例えばボタンが2つあり、マウスが上に来たらボタンの色を反転させるイベントは、マウスと2つのボタンの当たり判定を監視し、繰り返す。という感じなのでしょうか。 (ということはボタンの数やボタン自体のイベントが増えれば負荷も増えてしまう?)

  • MFC 6.0 VC++ で、処理が重くなります。

    MFC 6.0 VC++ で、処理が重くなります。 上記の環境でダイアログベースで処理を作成しています。 画面の再描画を繰り返すと、同じ処理をしていても処理が重くなります。 OnPainメッセージを受け取ったあとに、描画処理を行っているのですが、画面に表示に必要な計算も描画時に行っています。 仮想ウィンドウに描画してBitBlt()を実行する方法も試しましたが、ちらつかなくなった代わりに余計に処理が重くなりました。 描画のやり方が問題なのか、内部の処理が問題なのか良く分からないのですが、何か良い方法が無いでしょうか? そもそもダイアログベースで画像処理をしているのが間違いな気もするのですが・・・。

  • MFC 6.0 VC++ で、処理が重くなります。

    MFC 6.0 VC++ で、処理が重くなります。 上記の環境でダイアログベースで処理を作成しています。 画面の再描画を繰り返すと、同じ処理をしていても処理が重くなります。 OnPainメッセージを受け取ったあとに、描画処理を行っているのですが、画面に表示に必要な計算も描画時に行っています。 仮想ウィンドウに描画してBitBlt()を実行する方法も試しましたが、ちらつかなくなった代わりに余計に処理が重くなりました。 描画のやり方が問題なのか、内部の処理が問題なのか良く分からないのですが、何か良い方法が無いでしょうか? タスクマネージャーを見るとコミットチャージが増えているようです。 このコミットチャージもどう対処してよいのか良く分からないのですが、これが関係しているでしょうか?

  • MouseDownとMouseMoveイベントで質問です。

    学校の課題の為VB6.0でマウスを使用したプログラムを作成しているのですが、 MouseDownイベントとMouseMoveイベントで解らないことがあるので、 知っているかた、お願いします。 マウスの右ボタンと左ボタンの区別をつけるにはどうしたらいいのでしょうか? 例えば「左の時は描画し、右の時は描画しない」と言う感じで… わからなくて困っています。ぜひ、お願いします。

  • C++, MFCにてゲームプログラミング

    C++, MFCにてOpenGLライブラリを使用してぷよぷよを作成しようと考えています。 ぷよの自動落下なのですが、現在仮に「1秒に1マス落下」としています。 しかし、マウスを動かさないと落下してくれません。 ぷよの座標は1秒ごとに1マスずつ変化しています。 (ViewクラスのOnMouseMoveを呼び出さないと描画しない?) ぷよぷよに限った話ではないのですが、原因を教えていただけると嬉しいです・・・ 初歩的な質問ですみません・・・

  • .NET非同期イベント処理法について

    VS2010 Express VC++にてWindows Applicationを作成しております。 Form1のイベント(今回の場合はドラッグ&ドロップ)でスタートし、実行中の処理に対して、別のイベント(ボタンクリック等)によって処理内容を中途変更したいのですが、方法が分かりません。 具体的方法をご教示いただくか、又は参照先をお教えいただけないでしょうか。 宜しお願い致します。

  • javascriptのイベント処理につきまして

    左クリックをした時と、クリックを解除をした時 右クリックをした時と、クリックの解除をした時 クリックを解除した時は共通の処理を行います。 左クリックをした時と、右クリックをした時の処理は分けたいと思っているのですが、上手くいきません。ご教授願えますでしょうか・・・。 [ mousedownとmouseup ] この場合、クリックした瞬間にmousedownイベントが走り、クリックを上げた瞬間にmouseupイベントができます。 ただし、右クリックでも同様の処理が走ってしまいます。 [ contextmenu と onclick ] 上記を利用すると、右クリックはcontextmenu処理を行い、左クリックはonclick処理を行いますが、この2つのイベントはマウスが押されて離された瞬間にイベントが発生しますので、mouseup処理が先に処理してしまします。 よろしくお願い致します。

  • FocusLostでイベント処理を中断させたい

    TextFieldでフォーカスを失った時に 入力値をチェックするプログラムがあります。 入力値が不正な場合、メッセージを表示します。 また、終了ボタンで終了するか確認するメッセージを 表示します。 このとき、TextFieldに不正な値を入力し、 終了ボタンを選択するとメッセージが2回表示されます。 TextFieldのFocusAdapterのFocusLost処理により、 他のイベント処理をさせないようにしたいのですが、 戻り値がvoidということもあり、 制御でなきないのでしょうか? よい方法はありますか? キーイベントとマウスイベントで フォーカスのあるコンポーネントを保持し、 変更されたら入力値チェックを行う。 と考えてみましたが、何か問題が起きてしまいそうで。 よろしくお願いします。

  • Perlでイベント処理?

    ようやくPerlに慣れてきて、ふと思ったのですが VBではイベントというものがあり、Perl Tkでもキーボード・マウスのイベントの処理ができる みたいですが、クライアントでソケット受信した場合、いつ受信するかわかりませんので ループしていれば良いのですが、ループしている間は、他の実行が何も出来ず効率も悪いなと 思うようになりました。 WindowsのPerl5.6を使っているのですが、ソケット等、イベント処理できる方法はあるのでしょうか?

    • ベストアンサー
    • Perl
  • Access コマンドイベント前再描画

    ACCESSにて フォーム上にコマンドボタンと サブフォームがあり サブフォーム内のデータをコマンドボタンを押すとデータ不備の確認ロジックが処理されますが コマンドボタンを押すと   サブフォームのカーソルが2度 上から下まで移動します。  そのコマンドボタンのイベント関数の前にサブフォームが再描画一度処理されているようです。 再描画の指示をしているつもりがないので なぜ再描画されるかわかりません。 なにかお分かりなる方いらっしゃいませんか?

専門家に質問してみよう