冬の健康法を教えて!

プログラム初心者です。よろしくお願いします。

フォームアプリケーションで入門としてクリックやウィンドウの検知を行うプログラムを書いてみたのですが、右上の閉じるボタン[×]を押すとウィンドウは閉じますが、デバックは終了しません。
プロセスを見てもプロジェクト名のプロセスは残ったままで、デバッグを手動で停止させると消えます。
これはこういうものなのでしょうか?
初めて書いたプログラムなので比較対象が無くて分かりません。

以下プログラムコード
project1
------------------------------------------
(略)

protected: virtual void WndProc(System::Windows::Forms::Message% m) override
{
switch(m.Msg)
{
case WM_TIMER:
if(m.WParam.ToInt32()==1)
{
POINT point;
GetCursorPos(&point);
Form1::label2->Text="X:"+point.x;
Form1::label3->Text="Y:"+point.y;

setlocale( LC_ALL, "Japanese" );
TCHAR buff[260];
HWND hWnd;
hWnd=WindowFromPoint(point);
GetWindowText(hWnd, buff, sizeof(buff));
Form1::label1->Text=gcnew String(buff);
}break;

case WM_MOVE:
Form1::label4->Text="移動しました。";break;

case WM_LBUTTONDOWN:
Form1::label4->Text="左クリック";break;

case WM_RBUTTONDOWN:
Form1::label4->Text="右クリック";break;

/*default:
Form1::label4->Text=m.Msg.ToString();break;*/
}
Form::WndProc(m);
}


private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e)
{
HWND hmyWnd = static_cast<HWND>(this->Handle.ToPointer());
SetTimer(hmyWnd,1,100,NULL);
}

};
-------------------------------------------------------------

また、case WM_RBUTTONDOWN:の内部にClose();を書き足して実行すると
「'System.ObjectDisposedException' のハンドルされていない例外が System.Windows.Forms.dll で発生しました。」
と出ます。


何かおかしいところはありますでしょうか?
それとも仕様でしょうか?
お教えくださいm(_ _)m

A 回答 (3件)

以下のようにイベントハンドラが記述されるので・・・ってWM_MOVEでしたね・・・。



上記コードに、WM_MOUSEMOVE通知時のコードがあったとしたらそれをイベント
ハンドラに記述します。

という感じで、夫々の処理をイベントハンドラに書いても起きますか?
「閉じるを押してもデバッグが終了しません。」の回答画像3
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
画像付の説明恐れ入ります。イベントハイドラについてはそういうのがあるということは知っていましたが作ったことは無かったので参考になりました。
早速実装してみたところ、正常にデバッグが終了いたしました。
ウィンドウプロシージャがいけないようですね。

ですが私が今後実装したいと考えているプログラムは、グローバルフックを使い他のプログラム(FireFoxなど)のWM_MOVEを取得したいと考えています。
そのため今回はメッセージの扱いを学ぶためにウィンドウプロシージャを使用しました。

今後もこの分野で何度か質問をさせていただく事があると思います。その時はまたぜひ助けていただければ幸いです。

今回は本当にありがとうございます。

お礼日時:2012/06/26 00:40

次に、プロパティーウィンドウの稲妻マークをクリックしてください。

 ← (1)
次に、MouseMoveをダブルクリックしてください。 ← (2)
「閉じるを押してもデバッグが終了しません。」の回答画像2
    • good
    • 0

コード見ただけでは、正しい様な気がしますね。



ただ、なぜ、WndProcをオーバーライドするという方法を選んだんですか?
上記の事をやりたいだけならイベントハンドラを書いたらいいだけなんではないでしょうか?

一応、ご存知かもしれませんが、イベントハンドラの追加の仕方を紹介しておきます。

まず、下記画像にある様にメニューからプロパティウィンドウを表示させてください。
「閉じるを押してもデバッグが終了しません。」の回答画像1
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報