何らかの理由で、ユーザーが実際にXボタンをクリックしたときを検出する必要があります。私はこれまで持っていることはこれです:ウィンドウ内の "X"ボタンの座標はどのように取得できますか?
protected override void WndProc(ref Message m)
{
if (m.Msg == (int)0xa1) //WM_NCLBUTTONDOWN
{
Point p = new Point((int)m.LParam);
p = this.PointToClient(p);
if (p.X > 680)
{
//do what I need to do...
}
}
base.WndProc(ref m);
}
基本的に、私は、ウィンドウの非クライアント領域上でのマウスクリックで「WM_NCLBUTTONDOWN」メッセージを探してください。次に、LParamからX座標とY座標を取得し、最後にそれをScreen Coordinatesに変換します。この時点で、私はユーザーが非クライアント領域をクリックしたことを知り、フォーム上のどこにいるのか知っています。
私の質問は、これらの座標がXボタンに表示されているかどうかを確認する方法です。現時点では、私は680をハードコーディングしています(これはかなり大きいわけではありません)が、現在のウィンドウサイズで動作するためですが、問題はXPよりも大きなXボタンを持つWindows 7を使用していることです。オプション。さらに、私はY座標をコーディングしていないので、誰かがウィンドウの右端をクリックすると、そのコードもトリガーされます。だから誰にでもアイデアはありますか?
ボタンのクリックが重要か、ユーザーがアプリケーションを終了しているかどうかを実際に確認しようとしていますか? –
「xボタン」を他の閉じる/終了メッセージとは異なる方法で処理したいのはなぜですか? – Tim
それは奇妙な状況ですが、私は認めますが、基本的にはダイアログであり、終了時に検証をトリガーしたいのですが、標準のFormValidatingイベントはDialogであるためプロパティを使用できません(別の投稿、私はそれがバグだと思う)。 FormClosingイベントで手動でValidationを処理していますが、ユーザーがXをクリックしたかどうかを知る必要があります。その場合、検証をスキップします。意味がありますか? – BFree