アプリ版:「スタンプのみでお礼する」機能のリリースについて

「VC++2008 Express Edition」の入門者です。「Invalidate」の動作で悩んでいます。

動作は、「マウスを左クリックしたところに赤印を付ける」と言う物です。

最初、以下の様に「Form1」での時には問題なく動いていました。
--------------------------------------------------------------------------------
//マウスクリック
  private: System::Void Form1_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
//~~~~~~~~~~~~~~
//      マウス処理
//~~~~~~~~~~~~~~
      Invalidate();
  }
//画面描画
  private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) {
//~~~~~~~~~~~~~~
//      赤印を付ける
//~~~~~~~~~~~~~~
  }
--------------------------------------------------------------------------------
上記では、マウスを左クリックすると赤印がすぐに付き、問題はありませんでした。
上記を「Form1」から「panel4」上に書き換えたのが下記です。
--------------------------------------------------------------------------------
//マウスクリック
  private: System::Void panel4_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
//~~~~~~~~~~~~~~
//      マウス処理
//~~~~~~~~~~~~~~
      Invalidate();
  }
//画面描画
  private: System::Void panel4_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) {
//~~~~~~~~~~~~~~
//      赤印を付ける
//~~~~~~~~~~~~~~
  }
--------------------------------------------------------------------------------
上記では、マウスを左クリックしても赤印が書かれません。

一度別のプログラムなどに行って、赤印の場所が隠れて、またはこのプログラムWindowsを移動して、
赤印の場所を画面外に出して見えなくしてから戻った瞬間に赤印が書かれます。
上記の動作をInvalidateがしてるとは思うのですが・・・

Invalidateの使い方(updateも関係?)を教えて頂きたく、質問いたしました。

宜しくお願いいたします。

A 回答 (1件)

どこを無効化したのかの違いにより質問の現象が起きているのでしょう



Formクラスのメソッドの中で オブジェクトの指定無しにInvalidateを呼んだ場合 FormクラスのInavalidateが実行されます
このときフォームに貼り付けたコントロール(子)まで無効にしてくれるかどうかをMSDNなどで調べてみましょう

Form1_Paintで描画した際にはMouse_Downの中のInvalidateと整合性が取れているので描画します

panel4_Paintで描画させようとする場合Mouse_Downで単にInvalidate()としただけでは panel4を無効化しないのかも知れません
Mouse_Downの中で panel4->Invalidate() などとしてみましょう
    • good
    • 0
この回答へのお礼

panel4->Invalidate() としたら無事に動作しました。

「クラス」や「メソッド」の意味を理解せずに作っているから悩むのですね!!

どうも有り難うございました。

お礼日時:2009/07/09 16:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!