您好,我有一个简单的 c-sharp windows 应用程序。我在这个表单上有一个按钮,它启动另一个非模态弹出表单(固定工具窗口)。在弹出式表单中,我不断跟踪用户在弹出式表单上执行的 Windows 消息。每当用户关闭表单(弹出窗口)时,我将标志 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 位应用程序运行)。弹出代码无法处理关闭按钮单击操作 (Windows 7)。虽然这在 32 位机器 XP/XP-Embedded/2000 上是可能的
非常感谢这方面的任何帮助