Здравствуйте, У меня есть простое приложение c-sharp windows. У меня есть кнопка на этой форме, которая запускает другую не модальную всплывающую форму (фиксированное окно инструмента). Внутри всплывающей формы я отслеживаю сообщение Windows, которое пользователь выполняет во всплывающей форме. Всякий раз, когда пользователь закрывает форму (всплывающее окно), я устанавливаю флаг m_bQueryShutdownSent в true, это означает, что основная форма должна что-то делать.Проблемы при закрытии не модальных диалогов в .net, запущенных на окнах 7
Я использую линию
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/32bit машины. Это не для Windows 7 x64 (хотя мое приложение настроено на запуск как 32-разрядное приложение). Всплывающий код не может обрабатывать действие нажатия кнопки закрытия (Windows 7). Хотя это возможно на 32-битных машинах XP/XP-Embedded/2000
Любая помощь в этой связи высоко оценил
есть подсказка ... Это вызывает из-за тем в Windows 7 Мой код работает с этой строкой Application.VisualStyleState = System.Windows.Forms.VisualStyles.VisualStyleState.ClientAreaEnabled; –