Почему-то функция PostQuitMessage(0) не ловится циклом обработки сообщений:
while (!fDone) < if (PeekMessage( if (msg.message!=WM_QUIT) < TranslateMessage( DispatchMessage( >else < fDone=TRUE; >> else < RenderScene(); >>
Практически msg.message всегда не равно WM_QUIT, т.е. происходит как бы игнорирование PostQuitMessage.
В принципе я могу fDone=TRUE делать, но хотелось бы понять, в чем проблема?
Профессионал
Сообщений: 3,882
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
18.11.2008, 23:42
Мне представляется, дело в том, что — единственное из всех, сообщение WM_QUIT находится на «особом положении» и обрабатывается особым образом, немедленно прерывая цикл подкачки сообщений и инициируя завершение приложения. Я неоднократно встречал упоминания об этом в литературе и в MSDN; правда, точных ссылок дать сейчас не могу, а перелопачивать исходники MFC и RTL единственно для точной ссылки и «железобетонной» аргументации шибко неохота.
On Error Resume vs. GoTo и работа с ошибками (Серия VBA 36)
Сообщений: 957
Сказал(а) спасибо: 0
Поблагодарили 17 раз(а) в 16 сообщениях
Регистрация: 28.01.2007
19.11.2008, 15:40
перелопачивать исходники MFC и RTL единственно для точной ссылки и «железобетонной» аргументации шибко неохота. |
В принципе понятно, что я не сделал ошибки, а это главное. На будущее я просто запомню, что WM_QUIT — это очень нестандартное сообщение. Спасибо за объяснения!
« Предыдущая тема | Следующая тема »
Опции просмотра |
Линейный вид |
Комбинированный вид |
Древовидный вид |
Источник: www.hardforum.ru
Основы программирования в RAD-средах. ГДЗ по Информатике 11 класс.
1. В каком смысле используется термин «проект» в программировании?
2. Из каких файлов состоит типичный проект в RAD-среде?
3. Что такое форма? Почему для описания формы в Lazarus используются два файла?
4. Какие основные окна используются в среде Lazarus? Зачем они нужны?
5. Покажите, что программа, написанная с помощью Lazarus, состоит из объектов.
6. С помощью какого механизма транслятор «подключает» форму?
7. Где расположена основная программа в проекте Lazarus? Объясните все команды основной программы.
8. Почему в основной программе не виден цикл обработки сообщений?
9. Назовите некоторые важнейшие свойства формы. Какими способами можно их изменять?
10. Приведите примеры автоматического построения и изменения кода в RAD-среде.
11. Как создать новый обработчик события? Подумайте, можно ли сделать это вручную.
12. Как передаются параметры сообщения в обработчик?
09. Таймеры, использование времени простоя программы и локального цикла обработки сообщений
13. Как можно вывести сообщение об ошибке на экран?
Подготовьте сообщение
«Простая программа на языке C# в Visual Studio»
Задача
Попробуйте изменять какие-нибудь свойства формы, построив обработчик ещё одного события (например, OnShow — вывод формы на экран; OnClick — щелчок мыши; OnResize — изменение размеров).
Источник: murnik.ru
Почему в основной программе не виден цикл обработки сообщений
Создал кнопку и поле редактирование на форме. к кнопке добавил обработчик в котором в цикле выводится в поле редактирование значения. Но у меня виснет программа, как добавить в цикл for цикл обработки сообщений windows.
private void button_Click(object sender, RoutedEventArgs e) < MessageBox.Show(«start»); for(int i=0;i<1000;i++) < textBox.Text = Convert.ToString(i, 10); >MessageBox.Show(«end»); >
Регистрация: 12.01.2011
Сообщений: 19,500
Дык если надо чтоб не висло, то надо создать новый поток. (независимо WPF ли это или Дельфи)
В C# это делается относительно просто, особенно с async/await в .NET 4.5+. Ну или обычный Task из 4.0+. Более низкоуровневый вариант — Thread.
Форумчанин
Регистрация: 13.08.2015
Сообщений: 193
Дык если надо чтоб не висло, то надо создать новый поток. (независимо WPF ли это или Дельфи)
В C# это делается относительно просто, особенно с async/await в .NET 4.5+. Ну или обычный Task из 4.0+. Более низкоуровневый вариант — Thread.
А что там нету функций GetMessage или PeekMessage.
Должно в одном работать, нужно сообщения виндовс обрабатывать в цикле и все.
Поток создавать это один из вариантов, его позже попробую.
Последний раз редактировалось ninja2; 29.09.2015 в 14:50 .
Регистрация: 12.01.2011
Сообщений: 19,500
Надо ж не только посмотреть, но и достать/обработать.
В Дельфи подобное делается функцией ProcessMessages, а в виформс DoEvents.
В WPF нет такой простой функции (и вряд ли это сделано непреднамеренно), но немного более сложно наверно можно это сделать.
https://www.google.com/search?q=wpf+doevents+equivalent
Но даже если есть, обычно их использование для решения подобной задачи — плохой вариант, в любом ЯП/библиотеке. Используйте потоки.
Ну и вообще я ж писал в предыдущей теме http://programmersforum.ru/showpost. 1 29.09.2015 в 15:11 .
Форумчанин
Регистрация: 13.08.2015
Сообщений: 193
Надо почитать нормальную книжку по WPF сначала, разобраться с его основными фишками (+ общее из .NET типа потоков, синхронизации, структур данных). |
Потом, мне простые приложения научится делать без наворотов. Буду делать так как в WPF. Нихо старое учить, WPF чуть разберусь можно и Silverlite попробовать. Лучше новое пробовать.
Вычитал что в WPF такой функции нету, что можно подключать функцию из windowsform, а как ее вызвать. Делаю так.
System.Windows.Forms.Application.DoEvents();
Пишет ошибку что пространство windows.Froms не определено, типо ссылки нету на зборку, а что это значит?
Источник: www.programmersforum.ru