Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: MessageBox ведёт себя странно  (Прочитано 11568 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« : 10-06-2008 08:30 » 

Джон, помоги понять очередной затык Улыбаюсь)))

в общем, среда VC++6 , MFC, проект SDI , вьюха - CFormView . Вызывается такой код (неважно, где , к примеру - при щелчке правой кнопкой по вьюхе)

Код:
void CMyView::OnRButtonUp(UINT nFlags, CPoint point) 
{
MessageBox("1",0,MB_ICONASTERISK|MB_SYSTEMMODAL);

m_pDialog->PostMessage(WM_CLOSE,0,0);

MessageBox("2",0,MB_ICONASTERISK|MB_SYSTEMMODAL);
}

m_pDialog - это диалог , созданный через Create  , код должен просто закрыть диалог.
В диалоге CDialog::OnCancel() - не перегружено, то есть равносильно тому, как бы мы на крестик диалога нажали

И вот самое интересное: 1-й мессаджбокс блокирует главное окно программы, как ему и положено, а второй - нифига! Можно , не закрыв мессаджбох, спокойно тыркать в кнопки тулбара, а то и вовсе закрыть программу (последнее с треском винта показывает дамп Улыбаюсь) )

как это так ?
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 10-06-2008 08:58 » 

Тест проект на мыло. А то непонятно, что это за МессаджБокс у тебя такой. На первом месте хэндл должен быть.

Попробуй поменяй MessageBox( на ::MessageBox(NULL,

если не поможет, то тестовый сюда или на мыло.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 10-06-2008 09:03 » 

Джон, щас попробую, тока там хендл не нужен - там это метод CWnd

И ещё проблем - это не тестовый проект, тестовый соорудить надо , дома займусь этим делом )
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 10-06-2008 09:10 » 

с ::MessageBox тоже самое. А NULL , кстати, низя - не будет блокироваться главное окно.
Кстати, если послать сообщение WM_PAINT, например, то всё ок. А WM_CLOSE такую штуку вытворяет (

SendMessage - то же самое, кстати, та же мигня
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 10-06-2008 09:16 » 

хм, с другим диалогом (другого класса) всё нормально... Попробую порыться в диалоге
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #5 : 10-06-2008 09:17 » 

Ок, если это MFC то лучше используй AfXMessageBox, хотя я думаю проблема не в нём.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 10-06-2008 09:22 » 

о! Сравнил оба диалога, оказалось вот что: Если не переопределена OnClose(), то этот (д)эффект проявляется, а сделал так:

Код:
void CMyDialog::OnClose() 
{
//CDialog::OnClose();
CDialog::OnCancel();
}

и теперь всё хорошо

Загадка природы )
« Последнее редактирование: 10-06-2008 09:24 от Алексей1153++ » Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 10-06-2008 09:31 » 

Лёш, OnCancel - это виртуальная ф-я базового класса. OnClose - хэндлер сообщения WM_CLOSE
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #8 : 10-06-2008 09:34 » 

ИМХО у тебя modeless dialog не в порядке. Но больше смогу сказать увидев код.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 10-06-2008 09:59 » new

Да что там могет быть не в порядке то ? Никаких наворотов не делал вроде,
 в общем, дома ещё раз всё попробую и отпишусь - с проектом , если потребуется
Записан

Anchorite
Гость
« Ответ #10 : 16-06-2008 08:14 » 

А к чему такие навороты с MessageBox?

И почему между MessageBox-ами просто не спрятать окно при помощи ShowWindow(SW_HIDE) и  не отправить WM_CLOSE после второго MessageBox-а?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 16-06-2008 10:01 » 

Anchorite, это некрасиво будет.
MB для того и предназначен, чтоб модально открыться на фоне родителя, чтобы пользователь видел, что там произошло, но не мог пока ничего дальше делать
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines