manwe.pdp-11.ru
Дача хорошо) лето еще не кончилось)
Нет, звук в обозримом будущем не жди.
Решил разобраться с оконным интерфейсом эмулятора, и решить два вопроса.
1. Почему рамка окна эмулятора в стиле Win7 или младше, даже если запускаешь на Win8 и старше?
2. Почему при перетаскивании окна, или изменении размера окна, эмулятор замирает (перестают передаваться сообщения оконной процедуре)?
Итак, решил оба этих вопроса.
1. С первым вопросом удалось разобраться достаточно быстро.
Т.к. эмулятор я начинал писать в 2005 году еще под WinXP на достаточно небыстром компьютере, то чтобы 'все летало' мне пришлось заменить некоторые обработчки оконной функции на свои собственные. В частности WM_NCPAINT (рисование рамки окна) я переписал на более быстрый, с учетом вычитания необновляемых регионов и т.д.
Однако, на Win8 и выше, если программа что-то мутит с рамкой окна, то автоматически вместо стандартной для данной версии винды рамки, рисуется рамка от Win7.
Я вернул стандартный рисоватор рамки экрана, и теперь на Win8 и выше нормальные рамки.
2. Со вторым вопросом оказалось сложнее. Оказывается, если использовать стандартный обработчик перемещения или изменения размера окна, то в момент начала этих манипуляций, обработчик крутится в собственном цикле, и не отпускает поток, пока манипуляции с перемещением/ресайзом окна не завершены. Люди в инернетах при программировании оконных игр задавались этим вопросом, но стандартным ответом им было - пишите собственный обработчик перемещения/ресайза окна. Чем я и занялся. Написал. Потестировал на Win8 и Win7, работает, как часы. Плавненько и приятненько. Тестируем и отписываемся, если у кого будут глюки.
Обновленная версия в первом посту.
Последний раз редактировалось Titus; 20.04.2021 в 21:19.
Titus, а IDE-HDD будешь доделывать?
GUI в эмуляторах Titus'а это что-то новенькое![]()
Итак, на счет GUI.
Так как раньше я GUI методами классического WinAPI не делал, стал разбираться в этом деле.
Попробовал сделать такие тестовые штуки, как:
1. Меню
2. Тулбар (строка с пиктограммами в верхней части окна)
3. Статусбар (строка состояния в нижней части окна)
Плюс-минус разобрался в этом, но появился странный эффект. При плавных скроллингах (это хорошо было видно в эмуляторе УКНЦ или Спектрума), обновление экрана стало подергиваться где-то раз в секунду или около того.
Стал копать, какой элемент стал это дело подтормаживать. И наконец выяснил. Это делает тулбар. Видимо, даже в отсутствие активности пользователя, он периодически себя обновляет, да так, что заметно подтормаживает главный поток. А так как у меня эмулятор однопоточный (эмуляция, графика и оконный интерфейс - все в одном потоке), то это и сбивает синхронизацию с кадровой разверткой.
И вряд ли это можно как-то изменить, т.к. оконная функция тулбара своя собственная системная, ее нельзя поменять на свою, убрав это периодическое обновление.
Так что, если уж хочется тулбар, то придется или делать целиком собственный, или забить на него вообще.
Radon17(30.04.2021)
Забить и забыть. Не нужен.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)