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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2012, 16:33   #1
Manya
Пользователь
 
Регистрация: 22.10.2008
Сообщений: 13
По умолчанию Ожидание нажатия кнопки

Добрый день! Пишу программу: вывожу на экран текущее изображение, жду пока пользователь щелкнет мышью по какому-то месту изображения таким способом:
Код:
		set_point=true;
		while (set_point)		// ждем события - нажатия кнопки мыши
		{
			if (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))		
			{ 
				::TranslateMessage(&message); 
				::DispatchMessage(&message);  
			}
		}
Далее идет обработка, и затем открывается следующее изображение. И так по циклу для заранее выбранного списка изображений.
Все работает, но если во время ожидания нажатия мыши пользователь закроет программу - то окно закрывается, но сам процесс остается запущенным и я его останавливаю уже только через диспетчер задач. Как я понимаю, программа в этом случае продолжает ожидать нажатия мыши, правильно? Как мне корректно завершить работу программы в таком случае?
Manya вне форума Ответить с цитированием
Старый 01.08.2012, 16:51   #2
plgrm44
Пользователь
 
Регистрация: 29.05.2012
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Manya Посмотреть сообщение
Добрый день! Пишу программу: вывожу на экран текущее изображение, жду пока пользователь щелкнет мышью по какому-то месту изображения таким способом:
Код:
		set_point=true;
		while (set_point)		// ждем события - нажатия кнопки мыши
		{
			if (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))		
			{ 
				::TranslateMessage(&message); 
				::DispatchMessage(&message);  
			}
		}
Далее идет обработка, и затем открывается следующее изображение. И так по циклу для заранее выбранного списка изображений.
Все работает, но если во время ожидания нажатия мыши пользователь закроет программу - то окно закрывается, но сам процесс остается запущенным и я его останавливаю уже только через диспетчер задач. Как я понимаю, программа в этом случае продолжает ожидать нажатия мыши, правильно? Как мне корректно завершить работу программы в таком случае?
судя по всему в этом цикле руками отлавливать сообщение WM_QUIT и выходить
plgrm44 вне форума Ответить с цитированием
Старый 01.08.2012, 17:03   #3
Manya
Пользователь
 
Регистрация: 22.10.2008
Сообщений: 13
По умолчанию

Пробовала сделать вот так:
Код:
		set_point=true;
		while (set_point)		// ждем события - нажатия кнопки мыши
		{
			if (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))		
			{ 
				if (message.message==WM_QUIT)
				{
					// тут ставила точку остановки
					set_point=false;
				}
			::TranslateMessage(&message); 
			::DispatchMessage(&message);  
			}
		}
Но отладчик по этой ветке не заходит. Проходит сразу в деструктор класса.
Manya вне форума Ответить с цитированием
Старый 01.08.2012, 17:35   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

А вы вообще WM_QUIT посылаете? Обычно это шлет главное окно когда закрывается - у вас это есть?

Не лучше ли в самом окне реагировать на мыш?
Зачем PeekMessage? Чем плох GetMessage() который сам обрабатывает WM_QUIT?
waleri вне форума Ответить с цитированием
Старый 01.08.2012, 18:51   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Код:
  MSG msg;
  ZeroMemory(&msg, sizeof(MSG));
  while (WM_QUIT != msg.message)
  {
    if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
p51x вне форума Ответить с цитированием
Старый 01.08.2012, 18:52   #6
plgrm44
Пользователь
 
Регистрация: 29.05.2012
Сообщений: 23
По умолчанию

По ходу у вас там какое-то окошко созданное вручную и в другом потоке, понятно дело, что WM_QUIT к нему не придет и после уничтожения основного потока вы сразу же попадаете в деструктор вашего какого-то объекта.
Может перехватить это сообщение в главном окне и переслать этому окну?
plgrm44 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Воспроизведение звука и одновременное ожидание нажатия клавиши. NWR Visual C++ 1 07.09.2011 16:10
Ожидание нажатия любой клавиши в Assembler HostileZeth Помощь студентам 2 09.12.2010 20:48
Ожидание нажатия клавиши blinkapec Win Api 6 24.11.2010 22:06
Ожидание нажатия клавиши shurik_7866 Общие вопросы Delphi 2 25.04.2010 19:53
Эмуляция нажатия кнопки F3 Dimixis Помощь студентам 4 17.06.2007 23:42