こんにちは私は単純なc-sharpwindowsアプリケーションを持っています。このフォームには、別の非モーダルポップアップフォーム(固定ツールウィンドウ)を起動するボタンがあります。ポップアップフォーム内では、ユーザーがポップアップフォームで実行するウィンドウメッセージを追跡し続けます。ユーザーがフォームを閉じる(ポップアップ)ときはいつでも、フラグm_bQueryShutdownSentをtrueに設定します。これは、メインフォームに何かを実行するように通知するためのものです。
私はラインを使用します
m_bCloseButtonActive = (m.Result.ToInt32() == HTCLOSE);
ユーザーが閉じるボタンをクリックしたかどうかを追跡し、フラグm_bCloseButtonActiveを設定します
#region WndProc
const int WM_NCHITTEST = 0x0084;
const int WM_NCMOUSEMOVE = 0x00A0;
const int HTCLOSE = 0x0014;
const int WM_QUERYENDSESSION = 0x0011;
private bool m_bCloseButtonActive = false;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_NCHITTEST)
{
base.WndProc(ref m);
m_bCloseButtonActive = (m.Result.ToInt32() == HTCLOSE);
}
else
{
if (m.Msg == WM_QUERYENDSESSION && this.m_oParentForm != null)
this.m_bQueryShutdownSent = true;
base.WndProc(ref m);
}
}
#endregion WndProc
問題は、このコードがXP/32ビットマシンで機能することです。Windows 7 x64では動作しません(ただし、私のアプリケーションは32ビットアプリとして実行するように構成されています)。ポップアップコードは、閉じるボタンのクリックアクションを処理できません(Windows7)。これは32ビットマシンで可能ですがXP/XP-Embedded / 2000
この点での助けは深く感謝します