Проблема с вызовом стандартых диалогов:
При первом вызове GetOpenFileName() диалог Open прячется ПОД консольное окно программы, несмотря на то что в MSDNе обещано показавать стандартные диалоги поверх всех окон, как и положено модальным окнам.
Второй и все последующие вызовы GetOpenFileName() отрабатывают правильно и отображают диалог поверх основного окна программы.
Вопрос: как это лечить?
P.S. я и сам конечно еще покапаю, но вдруг есть тут Знатоки? Не может не быть...
Неактивен
ASBer написал:
При первом вызове GetOpenFileName() диалог Open прячется ПОД консольное окно программы...
Код, где происходит вызов, в студию. Скорее всего, в твоей программе сразу после вызова диалога устанавливается фокус на консоль.
Неактивен
HANDLE WindowH, InputH, OutputH; _CONSOLE_SCREEN_BUFFER_INFO Info; OPENFILENAME ofn; char input[1024]; char buf[1024]; ... WindowH=GetConsoleWindow(); ... ofn.lStructSize=sizeof(OPENFILENAME); ofn.hwndOwner=WindowH; ofn.lpstrFilter=NULL; ofn.lpstrFile = input; ofn.nMaxFile = sizeof(input); ofn.lpstrFilter = "Text Quest\0*.TQE\0Text\0*.TXT\0"; ofn.nFilterIndex = 1; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; ... char*Str=0; input[0]=0; //ShowWindow(WindowH,SW_HIDE);//неудачная попытка обойти баг if(GetOpenFileName(&ofn)) { Restart(); Str=RunFile(input); } //ShowWindow(WindowH,SW_RESTORE);//неудачная попытка обойти баг ...
вот тут текст целиком
Фокус не устанавливаю, но даже если бы это было, все что после GetOpenFileName(&ofn) сработает после закрытия диалога.
Отредактировано ASBer (08.04.2008 08:56)
Неактивен
Nex написал:
ShowWindow(WindowH,SW_HIDE);
прямо перед вызовом диалога. Зачем? Закомментируй HIDE и RESTORE.
угу, это просто неуклюжая попытка исправить вышеописанный баг.
без HIDE и RESTORE работает именно так как я описал.
Неактивен
А, ну если это не тот самый бажный код, то убери обе строки и где-нибудь в начале программы, например, после строк
//грузим файл игры (или help)
PutStr(RunFile((argc==2)?argv[1]:"help.txt"));
напиши
ShowWindow(WindowH,SW_SHOW);
Неактивен
ASBer написал:
Проблема с вызовом стандартых диалогов:
При первом вызове GetOpenFileName() диалог Open прячется ПОД консольное окно программы, несмотря на то что в MSDNе обещано показавать стандартные диалоги поверх всех окон, как и положено модальным окнам.
Второй и все последующие вызовы GetOpenFileName() отрабатывают правильно и отображают диалог поверх основного окна программы.
Вопрос: как это лечить?
P.S. я и сам конечно еще покапаю, но вдруг есть тут Знатоки? Не может не быть...
Я бы это лечить не стал, а принудительно открыл, потом закрыл окно и ждал когда его вызовут второй раз.
Отредактировано Korwin (08.04.2008 15:33)
Неактивен
К сожалению закрыть модальный диалог из того-же процесса нельзя, его должен закрыть юзер.
Можно при старте выводить какое-либо сообщение через MessageBox() с флагом MB_SYSTEMMODAL. После этого все диалоги открываются правильно. Кстати MessageBox() без MB_SYSTEMMODAL также первый раз прячется под окно...
Вот только для юзера это лишний бессмысленный клик при каждом открытии программы...
Вот если бы в GetOpenFileName() можно было бы подсунуть MB_SYSTEMMODAL, да некуда
Неактивен
НУ ВСТАВЬ ПОКА ПОМОЩЬ ПО ПРОГРАММЕ В ЭТО ОКНО СНАЧАЛА. ИЛИ НАЗВАНИЕ ПРОГРАММЫ.
Кстати, как будет называться платформа? RusBear? или "Mышка"?
Неактивен
Korwin написал:
Кстати, как будет называться платформа? RusBear? или "Mышка"?
А вот с названием все тяжко постараюсь определиться к бете.
А может быть конкурс провести на название для русской ИЛ-платформы??
Неактивен
Nex написал:
Предлагаю "Велосипед 1.0"
До 1.0 еще ой как далеко
А по багу никаких мыслей больше нет?
Неактивен
пока ещё рано самодельные парсеры велосипедами называть
в РТАДС-е хотя и можно всё, но некоторые возможности реализуются неочевидным для атора образом
взять хотя бы тот же глюк 'дай водку бомжу' = 'дай водке бомжа'
и комментарий к этому GrAnda- я понимаю, что парсер это может, но какие неочевидные вещи должен был учеть автор! не удивительно, что вышел глюк. кроме того, что именно в этом случае не надо дублировать некоторые падежи через # ещё и надо учесть нестандартную работу с бутылкой водки в связи с тем что в РТАДС не предусмотрена возможность реализовать торговлю по-нормальному. и приходится автору изхищряться.
так что- флаг в руки платформостроителям!
побольше платформ хороших и разных!
даёшь русккую платформу!
ASBeR - так держать!
Неактивен
Торговля для ИЛ нетипична. И при желании, на РТАДС реализуема. Как и многие эксцентричные вещи. Стандартная библиотека поддерживает стандартные объекты, которые широко используются. Писать библиотеку на все случаи жизни -- задаче нетривиальная и неблагодарная.
Неактивен
noname написал:
так что- флаг в руки платформостроителям!
побольше платформ хороших и разных!
даёшь русккую платформу!
По-моему, уже не раз говорили, что платформ у нас хватает. Я не возражаю, против еще одной хорошей платформы, и больше всего мне нравится в работе ASBer'a то, что он ее делал молча, героически удерживаясь от рекламы и обсуждений. Тем не менее, я резко против лозунга побольше платформ хороших и разных!! И начинающих платформостроителей мне хочется лупить трубой от крейсера, пока они не отступятся от своей задумки или не доведут ее до конца. На кладбище платформ и так хватает надгробий!
Неактивен
Торговля не так уж и редка, и трудностей больших не вызывает, если не связываться с купюрами и сдачей. Например, есть в "окопном дне".
Нестандартна торговля тем, что может обращаться не напрямую к конечным покупаемым объектам (как в случае Любви, там автор обозвал полки водкой. Кстати, Миш, попробуй набрать "купить" в магазине:) ). Однако в стандартной библиотеке есть подобный глагол - "спросить об". Также на форуме ТАДСа где-то пылится пример "создать воздушный замок". Тоже похоже.
Неактивен
По-моему, уже не раз говорили, что платформ у нас хватает.
Так говорят многие, но пока не появятся профессиональные платформы ориентированные на русский язык изначально, врятли народ перестанет создавать новые.
Korwin, а какие у нас платформы не только хорошие, но профессиональные?
Неактивен
Eten написал:
По-моему, уже не раз говорили, что платформ у нас хватает.
Так говорят многие, но пока не появятся профессиональные платформы ориентированные на русский язык изначально, врятли народ перестанет создавать новые.
Korwin, а какие у нас платформы не только хорошие, но профессиональные?
Eten, можно узнать, что ты имеешь в виду под термином "профессиональная платформа"? Если та, которой можно профессионально зарабатывать себе на жизнь, то боюсь, увы, нет таких, но не потому, что инструменты плохи... а потому что то, для чего они служат, не является профессией в наше время.
Ловчая яма была профессиональным средством охоты на мамонтов... но нет сейчас такой профессии - охотник на мамонтов, и инструмент уже - не профессиональный, хотя рыть ее можно с применением экскаваторов, С4, лазерных дальномеров, спутникового наведения и прочих технических наворотов.
Отредактировано Korwin (09.04.2008 19:16)
Неактивен
Мной проффесиональность в простом и нашем IF-ом понимании подразумевается, как минимум на уровне западных для английского языка, а это к примеру: Inform, TADS. Наши сущевствующие и популярные платформы, всего лишь улучшают некоторые стороны реализации, но при этом ущемляются другие аспекты.
К примеру в урке легко создать простой квест, но хороший и в длительности сюжета и посложности - это уже архитруд. ТКР - можно также создать квест, но из-за сокращений его трудно читать в исходнике. И так можно перечислять дальше, иначе говоря, каждый из нас делает ставку на определенные особенности и получает определенные минусы. Так, что на мой взгляд проффесиональная платформа - это та платформа, которая может совместить в себе все плюсы выше описанных и т.д. и минимизировать все минусы.
Это можно даже назвать идеалом всех платформ, т.к. все к этому стремятся. Так, вот и возникает вопрос, а есть ли действительно проффесионально (а может даже искуссно) написаные платформы с ориентацией на русский язык?
Неактивен
Попробую ответить, Eten. IMHO, любую платформу можно постепенно довести до ума, если автор ей занимается, постоянно совершенствуя и оттачивая ее возможности. В свое время Гор сказал, что платформа это сообщество, и я с этим согласен. На URQ сейчас нет разработчика, но пока они были, успел сложиться коллектив авторов и игроков. В результате, думаю, появление новых энтузиастов это вопрос времени - Милена и разработка на J2me это подтверждают. QSP практически самая профессиональная платформа из менюшек. RTADS из парсерных, потому что есть активное сообщество, которое ее развивает. TKP2 имел свое сообщество, но автор прекратил им заниматься, а исходники закрыты. RINFORM жив благодаря усилиям Всеволода Зубарева. И Денис вроде вернулся. 6дней также позволяет сделать хорошую игру и может найти еще сторонников. Так вот, для ASBer'a, начавшего тему, сейчас самое главное терпеливо делать и делать свою платформу, пока на ней не напишут игры три независимых от разработчика автора. Если это случится - платформа имеет шанс
Неактивен
Korwin написал:
Кстати, как будет называться платформа? RusBear? или "Mышка"?
Text Quest Engine прижилось как рабочее название.
TQE в сокращении.
Неактивен