Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2008, 16:21   #1
joker
Форумчанин
 
Регистрация: 23.09.2007
Сообщений: 147
По умолчанию Странное закрытие

Когда кликаю на кнопке закрыть второстепенного окна своей проги или жму ALT+F4, то, понятно дело, убивается только окно, а если в контекстном меню на панели задач на иконке окна нажать закрыть, то убивается все приложение. Отчего может такое происходить?
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
joker вне форума Ответить с цитированием
Старый 21.03.2008, 16:54   #2
Killer_djon
Форумчанин
 
Регистрация: 26.04.2007
Сообщений: 143
По умолчанию

Скорее всего при закрытии второстепенного окна, ссылаясь на handle окна его же и закрвает, а в панели задач при нажатии на закрыть он образно говоря выполняет application.terminate;
Поэтому объясни что именно ты хочешь получить в результате закрытия того и другово???
Свободу клавиатурным самураям...
Killer_djon вне форума Ответить с цитированием
Старый 23.03.2008, 16:14   #3
joker
Форумчанин
 
Регистрация: 23.09.2007
Сообщений: 147
По умолчанию

получается, что при нажатии закрыть на панели задач главному окну приложения отправляется сообщение о закрытии, а не отдельно второстепенному окну, связано ли это с архитектурой VCL или система отправляет родителю окна сообщение о закрытии
конечно, в моем случае я могу избавится от этого, просто помимо проверки скрыто ли главное окно во время отправки сообщения о закрытии проверять еще и второстепенные формы, но хотелось бы узнать, отчего это вообще зависит
пожалуйста, код в студию
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
joker вне форума Ответить с цитированием
Старый 23.03.2008, 16:48   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от joker Посмотреть сообщение
пожалуйста, код в студию
Какой код!!??. При чём здесь VCL! Эксплорер отправляет главному окну (вполне естественно, что его не заботит количество дочерних окон в неизвестных ему приложениях) WM_SYSCOMMAND с параметром SC_MOUSEMENU и координатами своей кнопки. Всё! Вы чего сделать-то хотите?
B_N вне форума Ответить с цитированием
Старый 24.03.2008, 03:50   #5
joker
Форумчанин
 
Регистрация: 23.09.2007
Сообщений: 147
По умолчанию

вот именно, это я и хотел узнать, теперь хотелось бы узнать разные способы, как с этим бороться
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
joker вне форума Ответить с цитированием
Старый 24.03.2008, 11:14   #6
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Убрать из меню пункт "Закрыть Alt+F4"
пыщь
JTG вне форума Ответить с цитированием
Старый 25.03.2008, 05:11   #7
joker
Форумчанин
 
Регистрация: 23.09.2007
Сообщений: 147
По умолчанию

Код:
TForm1.WMSYSCOMMAND(var Msg: TMessage);
begin
 If not Visible and (msg.WParam=SC_MOUSEMENU) then exit;
 inherited;
end;
ни фига не помогло, как сделать так, чтобы этот клик только закрывал вторичное окно ввода пароля?
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
joker вне форума Ответить с цитированием
Старый 25.03.2008, 10:44   #8
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от joker Посмотреть сообщение
Код:
TForm1.WMSYSCOMMAND(var Msg: TMessage);
begin
 If not Visible and (msg.WParam=SC_MOUSEMENU) then exit;
 inherited;
end;
ни фига не помогло, как сделать так, чтобы этот клик только закрывал вторичное окно ввода пароля?
Вы малость поторопились.
Во-первых, wParam в WM_SYSCOMMAND надо маскировать с 0xFFF0 - младшие четыре бита Windows использует по своему усмотрению.
Во-вторых, Зачем Вам само меню-то? Нужно или WM_SYSCOMMAND:SC_CLOSE или проще WM_CLOSE для главного меню проверять. (Ещё не понял, при чём здесь Visible?)
В-третьих, я тоже поторопился, забыл уже, что эксплорер отправляет не WM_SYSCOMMAND, а 0x313, которое MS не документирует и берёт меню "живьём", но этот момент тоже можно перехватить через WM_INITMENU
B_N вне форума Ответить с цитированием
Старый 26.03.2008, 03:21   #9
joker
Форумчанин
 
Регистрация: 23.09.2007
Сообщений: 147
По умолчанию

Цитата:
Сообщение от B_N Посмотреть сообщение
В-третьих, я тоже поторопился, забыл уже, что эксплорер отправляет не WM_SYSCOMMAND, а 0x313, которое MS не документирует и берёт меню "живьём", но этот момент тоже можно перехватить через WM_INITMENU
А про это поподробнее, я в предках формы нашел только обработчики WM_INITMENUPOPUP

поменял SC_MOUSEMENU на SC_CLOSE, но ни фига

Код:
TForm1.WMSYSCOMMAND(var Msg: TMessage);   
begin  
 If not Visible and (msg.WParam=SC_CLOSE) then exit;   
 inherited;   
end;

потом перепробовал все варианты микширования SC_CLOSE c $FFF0 и с
WParam, но ниче не вышло, покажите как конкретно от этого избавиться, иначе я просто не пойму
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
joker вне форума Ответить с цитированием
Старый 26.03.2008, 11:58   #10
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

joker, я не знаю, что Вы делаете и от чего собираетесь избавиться. Что за окно Form1, при чем здесь visible и т.п. WM_SYSCOMMAND проверяется например так:
Код:
void CmenutestDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	switch(nID & 0xFFF0){	// (wParam and $FFF0)
		case SC_MOUSEMENU	: Beep(1000,40); break;
		case SC_CLOSE		: Beep(3000, 40); break;
		case SC_MAXIMIZE	: MessageBox(TEXT("SC_MAXIMIZE"), NULL, MB_OK | MB_ICONINFORMATION); break;
		case SC_MINIMIZE	: MessageBox(TEXT("SC_MINIMIZE"), NULL, MB_OK | MB_ICONINFORMATION); break;
		default				: CDialog :: OnSysCommand(nID, lParam);
	}
}
Только я не понимаю, зачем он Вам нужен. Проверяйте какое-то условие в OnCloseQuery главного окна и всё.
B_N вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Че-то странное .... ~Brilliant~ Безопасность, Шифрование 9 27.04.2009 13:57
закрытие вкладки в TTabControl Shade Помощь студентам 3 06.02.2009 13:10
Закрытие программы Zloy_Doomer Общие вопросы Delphi 3 23.06.2008 19:08
Странное поведение ПОИСКПОЗ ZORRO2005 Microsoft Office Excel 5 19.05.2008 14:02
Закрытие приложения Лёка Общие вопросы Delphi 7 09.03.2008 15:50