プログラム初心者です。よろしくお願いします。
フォームアプリケーションで入門としてクリックやウィンドウの検知を行うプログラムを書いてみたのですが、右上の閉じるボタン[×]を押すとウィンドウは閉じますが、デバックは終了しません。
プロセスを見てもプロジェクト名のプロセスは残ったままで、デバッグを手動で停止させると消えます。
これはこういうものなのでしょうか?
初めて書いたプログラムなので比較対象が無くて分かりません。
以下プログラムコード
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript jsで、switch文で書かれた分をif文にできませんか。 1 2022/07/28 15:10
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- C言語・C++・C# 未解決の外部シンボル _printfが関数_mainで参照されました 1 2022/09/18 15:28
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAにてメール作成した際、一部...
-
Excelで4096点以上のFFTの方法
-
あるプログラムのコマンドライ...
-
■AU「 スマホトクするプログラ...
-
「Outlookが他のプログラムによ...
-
クリックするとページ内で説明...
-
XnViewにwebpを「いつも開く」...
-
PICマイコンのコピー(クローン...
-
背景除去のプログラムを作りたい
-
VBAでユーザーフォームが自動的...
-
スポーツ施設での出来事で心配...
-
インクリメント演算子のみを用...
-
Fortran流体シミュレーション
-
gifアニメ―ションを動画(mp4で...
-
C言語で移動平均のプログラムを...
-
最長周期系列(M系列?)の生成プ...
-
等差数列の和を求めるプログラム
-
Notepad++の関数リスト表示でC...
-
じゃんけん 勝ち負けアイコ回...
-
3つの整数を読み込み昇順に並べ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
あるプログラムのコマンドライ...
-
Excelで4096点以上のFFTの方法
-
Excelに埋め込んだVBAのプログ...
-
「Outlookが他のプログラムによ...
-
VBAにてメール作成した際、一部...
-
Notepad++の関数リスト表示でC...
-
自動クエリとはどういうもので...
-
読み込み中にアクセス違反が発...
-
PICマイコンのコピー(クローン...
-
XnViewにwebpを「いつも開く」...
-
未使用の変数を一括検索する方法
-
VBAでユーザーフォームが自動的...
-
UWSCで指定のフォルダを開きたい。
-
パックマンプログラム
-
このプログラミング誰か教えて...
-
モジュール、アプリケーション...
-
Vba UserFormを前面に出す方法...
-
特定のwebサイトのタイトルや記...
-
ドロップダウンリストの文字を...
-
画像を読み込むのと取り込むの...
おすすめ情報