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

No.3ベストアンサー
- 回答日時:
以下のようにイベントハンドラが記述されるので・・・ってWM_MOVEでしたね・・・。
上記コードに、WM_MOUSEMOVE通知時のコードがあったとしたらそれをイベント
ハンドラに記述します。
という感じで、夫々の処理をイベントハンドラに書いても起きますか?

回答ありがとうございます。
画像付の説明恐れ入ります。イベントハイドラについてはそういうのがあるということは知っていましたが作ったことは無かったので参考になりました。
早速実装してみたところ、正常にデバッグが終了いたしました。
ウィンドウプロシージャがいけないようですね。
ですが私が今後実装したいと考えているプログラムは、グローバルフックを使い他のプログラム(FireFoxなど)のWM_MOVEを取得したいと考えています。
そのため今回はメッセージの扱いを学ぶためにウィンドウプロシージャを使用しました。
今後もこの分野で何度か質問をさせていただく事があると思います。その時はまたぜひ助けていただければ幸いです。
今回は本当にありがとうございます。

No.1
- 回答日時:
コード見ただけでは、正しい様な気がしますね。
ただ、なぜ、WndProcをオーバーライドするという方法を選んだんですか?
上記の事をやりたいだけならイベントハンドラを書いたらいいだけなんではないでしょうか?
一応、ご存知かもしれませんが、イベントハンドラの追加の仕方を紹介しておきます。
まず、下記画像にある様にメニューからプロパティウィンドウを表示させてください。

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイルの開き方
-
CASLIIのプログラム(並び替え...
-
あるプログラムのコマンドライ...
-
寿命
-
自動クエリとはどういうもので...
-
Excelで4096点以上のFFTの方法
-
VBAにてメール作成した際、一部...
-
VBAでユーザーフォームが自動的...
-
VB6から他のプログラムを強制終...
-
socketでの複数NICの扱い
-
COBOLでBLOCK CONTAINS句につい...
-
未使用の変数を一括検索する方法
-
n88basicからwindows版Basicへ...
-
OS入ってる機器のソフト・アプ...
-
eepromについて
-
VB.NETで、プログラム上から新...
-
TMBMSRV.exeによるCPU使用率上昇
-
excelのexe化について
-
プログラムから開く・・・DPP
-
べき乗
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイルの開き方
-
あるプログラムのコマンドライ...
-
OS入ってる機器のソフト・アプ...
-
Excelで4096点以上のFFTの方法
-
読み込み中にアクセス違反が発...
-
銃を発砲するならともかく、日...
-
VBAにてメール作成した際、一部...
-
ドロップダウンリストの文字を...
-
PICマイコンのコピー(クローン...
-
UWSCで指定のフォルダを開きたい。
-
XnViewにwebpを「いつも開く」...
-
Excelに埋め込んだVBAのプログ...
-
「Outlookが他のプログラムによ...
-
visual studio 2019を使ってい...
-
未使用の変数を一括検索する方法
-
powered byの表記について
-
VBAでユーザーフォームが自動的...
-
画像を読み込むのと取り込むの...
-
VC++コンソールアプリでウイン...
-
Google カレンダーの商用利用
おすすめ情報