※ ChatGPTを利用し、要約された質問です(原文:閉じるを押してもデバッグが終了しません。)
閉じるボタンを押してもデバッグが終了しない問題について
このQ&Aのポイント
フォームアプリケーションで閉じるボタンを押してもデバッグが終了しない問題について質問があります。
右上の閉じるボタン[×]を押すとウィンドウは閉じますが、デバッグは終了しません。
プロジェクト名のプロセスは残ったままで、デバッグを手動で停止させると消えます。これは仕様なのでしょうか?
プログラム初心者です。よろしくお願いします。
フォームアプリケーションで入門としてクリックやウィンドウの検知を行うプログラムを書いてみたのですが、右上の閉じるボタン[×]を押すとウィンドウは閉じますが、デバックは終了しません。
プロセスを見てもプロジェクト名のプロセスは残ったままで、デバッグを手動で停止させると消えます。
これはこういうものなのでしょうか?
初めて書いたプログラムなので比較対象が無くて分かりません。
以下プログラムコード
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
お礼
回答ありがとうございます。 画像付の説明恐れ入ります。イベントハイドラについてはそういうのがあるということは知っていましたが作ったことは無かったので参考になりました。 早速実装してみたところ、正常にデバッグが終了いたしました。 ウィンドウプロシージャがいけないようですね。 ですが私が今後実装したいと考えているプログラムは、グローバルフックを使い他のプログラム(FireFoxなど)のWM_MOVEを取得したいと考えています。 そのため今回はメッセージの扱いを学ぶためにウィンドウプロシージャを使用しました。 今後もこの分野で何度か質問をさせていただく事があると思います。その時はまたぜひ助けていただければ幸いです。 今回は本当にありがとうございます。