Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

0    0    #1
07.04.2008 20:42

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Знатокам WinAPI, help!

Проблема с вызовом стандартых диалогов:
При первом вызове GetOpenFileName() диалог Open прячется ПОД консольное окно программы, несмотря на то что в MSDNе обещано показавать стандартные диалоги поверх всех окон, как и положено модальным окнам.
Второй и все последующие вызовы GetOpenFileName() отрабатывают правильно и отображают диалог поверх основного окна программы.

Вопрос: как это лечить? smile

P.S. я и сам конечно еще покапаю, но вдруг есть тут Знатоки? Не может не быть...

Неактивен

0    0    #2
07.04.2008 22:02

Nex
Участник (+120, -130)
Зарегистрирован: 11.06.2007
Сообщений: 2053

---

Re: Знатокам WinAPI, help!

ASBer написал:

При первом вызове GetOpenFileName() диалог Open прячется ПОД консольное окно программы...

Код, где происходит вызов, в студию. Скорее всего, в твоей программе сразу после вызова диалога устанавливается фокус на консоль.

Неактивен

0    0    #3
07.04.2008 22:12

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Знатокам WinAPI, help!

Код:

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)

Неактивен

0    0    #4
07.04.2008 22:22

Nex
Участник (+120, -130)
Зарегистрирован: 11.06.2007
Сообщений: 2053

---

Re: Знатокам WinAPI, help!

ShowWindow(WindowH,SW_HIDE);
прямо перед вызовом диалога. Зачем? Закомментируй HIDE и RESTORE.

Неактивен

0    0    #5
08.04.2008 07:34

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Знатокам WinAPI, help!

Nex написал:

ShowWindow(WindowH,SW_HIDE);
прямо перед вызовом диалога. Зачем? Закомментируй HIDE и RESTORE.

угу, это просто неуклюжая попытка исправить вышеописанный баг.
без HIDE и RESTORE работает именно так как я описал. sad

Неактивен

0    0    #6
08.04.2008 10:46

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Знатокам WinAPI, help!

попробуй

Код:

ofn.hwndOwner = NULL

Неактивен

0    0    #7
08.04.2008 11:54

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Знатокам WinAPI, help!

fireton написал:

попробуй

Код:

ofn.hwndOwner = NULL

уже пробовал, не помогает sad

Неактивен

0    0    #8
08.04.2008 14:00

Nex
Участник (+120, -130)
Зарегистрирован: 11.06.2007
Сообщений: 2053

---

Re: Знатокам WinAPI, help!

А, ну если это не тот самый бажный код, то убери обе строки и где-нибудь в начале программы, например, после строк

//грузим файл игры (или help)
PutStr(RunFile((argc==2)?argv[1]:"help.txt"));

напиши

ShowWindow(WindowH,SW_SHOW);

Неактивен

0    0    #9
08.04.2008 15:24

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Знатокам WinAPI, help!

2Nex нет, не помогло sad

Неактивен

0    0    #10
08.04.2008 15:28

Korwin
Гоблин, зеленый от недосыпа (+188, -16)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 796
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

Re: Знатокам WinAPI, help!

ASBer написал:

Проблема с вызовом стандартых диалогов:
При первом вызове GetOpenFileName() диалог Open прячется ПОД консольное окно программы, несмотря на то что в MSDNе обещано показавать стандартные диалоги поверх всех окон, как и положено модальным окнам.
Второй и все последующие вызовы GetOpenFileName() отрабатывают правильно и отображают диалог поверх основного окна программы.

Вопрос: как это лечить? smile

P.S. я и сам конечно еще покапаю, но вдруг есть тут Знатоки? Не может не быть...

Я бы это лечить не стал, а принудительно открыл, потом закрыл окно и ждал когда его вызовут второй раз.

Отредактировано Korwin (08.04.2008 15:33)

Неактивен

0    0    #11
08.04.2008 15:56

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Знатокам WinAPI, help!

К сожалению закрыть модальный диалог из того-же процесса нельзя, его должен закрыть юзер.
Можно при старте выводить какое-либо сообщение через MessageBox() с флагом MB_SYSTEMMODAL. После этого все диалоги открываются правильно. Кстати MessageBox() без MB_SYSTEMMODAL также первый раз прячется под окно...
Вот только для юзера это лишний бессмысленный клик при каждом открытии программы...
Вот если бы в GetOpenFileName() можно было бы подсунуть MB_SYSTEMMODAL, да некуда sad

Неактивен

0    0    #12
08.04.2008 16:34

Korwin
Гоблин, зеленый от недосыпа (+188, -16)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 796
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

Re: Знатокам WinAPI, help!

НУ ВСТАВЬ ПОКА ПОМОЩЬ ПО ПРОГРАММЕ В ЭТО ОКНО СНАЧАЛА. ИЛИ НАЗВАНИЕ ПРОГРАММЫ.
Кстати, как будет называться платформа? RusBear? или "Mышка"?

Неактивен

0    0    #13
08.04.2008 16:59

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Знатокам WinAPI, help!

Korwin написал:

Кстати, как будет называться платформа? RusBear? или "Mышка"?

А вот с названием все тяжко smile постараюсь определиться к бете.
А может быть конкурс провести на название для русской ИЛ-платформы?? smilesmilesmile

Неактивен

0    0    #14
08.04.2008 23:06

Nex
Участник (+120, -130)
Зарегистрирован: 11.06.2007
Сообщений: 2053

---

Re: Знатокам WinAPI, help!

ASBer написал:

А вот с названием все тяжко smile постараюсь определиться к бете.
А может быть конкурс провести на название для русской ИЛ-платформы?? smilesmilesmile

Предлагаю "Велосипед 1.0"

Неактивен

0    0    #15
09.04.2008 08:55

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Знатокам WinAPI, help!

Nex написал:

Предлагаю "Велосипед 1.0"

До 1.0 еще ой как далеко smile
А по багу никаких мыслей больше нет?

Неактивен

0    0    #16
09.04.2008 10:45

noname
Участник (+36, -9)
Зарегистрирован: 04.04.2008
Сообщений: 729

noname

Re: Знатокам WinAPI, help!

пока ещё рано самодельные парсеры велосипедами называть

в РТАДС-е хотя и можно всё, но некоторые возможности реализуются неочевидным для атора образом

взять хотя бы тот же глюк 'дай водку бомжу' = 'дай водке бомжа'

и комментарий к этому GrAnda- я понимаю, что парсер это может, но какие неочевидные вещи должен был учеть автор! не удивительно, что вышел глюк. кроме того, что именно в этом случае не надо дублировать некоторые падежи через # ещё и надо учесть нестандартную работу с бутылкой водки в связи с тем что в РТАДС не предусмотрена возможность реализовать торговлю по-нормальному. и приходится автору изхищряться.

так что- флаг в руки платформостроителям!
побольше платформ хороших и разных!
даёшь русккую платформу!
ASBeR - так держать!

Неактивен

0    0    #17
09.04.2008 12:45

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Знатокам WinAPI, help!

Торговля для ИЛ нетипична. И при желании, на РТАДС реализуема. Как и многие эксцентричные вещи. Стандартная библиотека поддерживает стандартные объекты, которые широко используются. Писать библиотеку на все случаи жизни -- задаче нетривиальная и неблагодарная.

Неактивен

0    0    #18
09.04.2008 13:21

Korwin
Гоблин, зеленый от недосыпа (+188, -16)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 796
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

Re: Знатокам WinAPI, help!

noname написал:

так что- флаг в руки платформостроителям!
побольше платформ хороших и разных!
даёшь русккую платформу!

По-моему, уже не раз говорили, что платформ у нас хватает. Я не возражаю, против еще одной хорошей платформы, и больше всего мне нравится в работе ASBer'a то, что он ее делал молча, героически удерживаясь от рекламы и обсуждений. Тем не менее, я резко против лозунга побольше платформ хороших и разных!! И начинающих платформостроителей мне хочется лупить трубой от крейсера, пока они не отступятся от своей задумки или не доведут ее до конца. На кладбище платформ и так хватает надгробий!

Неактивен

0    0    #19
09.04.2008 13:22

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Знатокам WinAPI, help!

Торговля не так уж и редка, и трудностей больших не вызывает, если не связываться с купюрами и сдачей.   Например, есть в "окопном дне".
Нестандартна торговля тем, что может обращаться не напрямую к конечным покупаемым объектам (как в случае Любви, там автор обозвал полки водкой. Кстати, Миш, попробуй набрать "купить" в магазине:) ). Однако в стандартной библиотеке есть подобный глагол - "спросить об". Также на форуме ТАДСа где-то пылится пример "создать воздушный замок". Тоже похоже.

Неактивен

0    0    #20
09.04.2008 18:54

Eten
Участник (+9, -307)
Откуда: Балаково, Санкт-Петербург.
Зарегистрирован: 21.05.2007
Сообщений: 1416
Вебсайт

---

Re: Знатокам WinAPI, help!

По-моему, уже не раз говорили, что платформ у нас хватает.

Так говорят многие, но пока не появятся профессиональные платформы ориентированные на русский язык изначально, врятли народ перестанет создавать новые. lol
Korwin, а какие у нас платформы не только хорошие, но профессиональные?hmm

Неактивен

0    0    #21
09.04.2008 19:15

Korwin
Гоблин, зеленый от недосыпа (+188, -16)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 796
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

Re: Знатокам WinAPI, help!

Eten написал:

По-моему, уже не раз говорили, что платформ у нас хватает.

Так говорят многие, но пока не появятся профессиональные платформы ориентированные на русский язык изначально, врятли народ перестанет создавать новые. lol
Korwin, а какие у нас платформы не только хорошие, но профессиональные?hmm

Eten, можно узнать, что ты имеешь в виду под термином "профессиональная платформа"? Если та, которой можно профессионально зарабатывать себе на жизнь, то боюсь, увы, нет таких, но не потому, что инструменты плохи... а потому что то, для чего они служат, не является профессией в наше время.

Ловчая яма была профессиональным средством охоты на мамонтов... но нет сейчас такой профессии - охотник на мамонтов, и инструмент уже - не профессиональный, хотя рыть ее можно с применением экскаваторов, С4, лазерных дальномеров, спутникового наведения и прочих технических наворотов.

Отредактировано Korwin (09.04.2008 19:16)

Неактивен

0    0    #22
09.04.2008 19:28

Eten
Участник (+9, -307)
Откуда: Балаково, Санкт-Петербург.
Зарегистрирован: 21.05.2007
Сообщений: 1416
Вебсайт

---

Re: Знатокам WinAPI, help!

Мной проффесиональность в простом и нашем IF-ом понимании подразумевается, как минимум на уровне западных для английского языка, а это к примеру: Inform, TADS. Наши сущевствующие и популярные платформы, всего лишь улучшают некоторые стороны реализации, но при этом ущемляются другие аспекты.

К примеру в урке легко создать простой квест, но хороший и в длительности сюжета и посложности - это уже архитруд. ТКР - можно также создать квест, но из-за сокращений его трудно читать в исходнике. И так можно перечислять дальше, иначе говоря, каждый из нас делает ставку на определенные особенности и получает определенные минусы. Так, что на мой взгляд проффесиональная платформа - это та платформа, которая может совместить в себе все плюсы выше описанных и т.д. и минимизировать все минусы.

Это можно даже назвать идеалом всех платформ, т.к. все к этому стремятся. Так, вот и возникает вопрос, а есть ли действительно проффесионально (а может даже искуссно) написаные платформы с ориентацией на русский язык?

Неактивен

0    0    #23
10.04.2008 00:48

Korwin
Гоблин, зеленый от недосыпа (+188, -16)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 796
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

Re: Знатокам WinAPI, help!

Попробую ответить, Eten. IMHO, любую платформу можно постепенно довести до ума, если автор ей занимается, постоянно совершенствуя и оттачивая ее возможности. В свое время Гор сказал, что платформа это сообщество, и я с этим согласен. На URQ сейчас нет разработчика, но пока они были, успел сложиться коллектив авторов и игроков. В результате, думаю, появление новых энтузиастов это вопрос времени - Милена и разработка на J2me это подтверждают. QSP практически самая профессиональная платформа из менюшек. RTADS из парсерных, потому что есть активное сообщество, которое ее развивает. TKP2 имел свое сообщество, но автор прекратил им заниматься, а исходники закрыты. RINFORM жив благодаря усилиям Всеволода Зубарева. И Денис вроде вернулся. 6дней также позволяет сделать хорошую игру и может найти еще сторонников. Так вот, для ASBer'a, начавшего тему, сейчас самое главное терпеливо делать и делать свою платформу, пока на ней не напишут игры три независимых от разработчика автора. Если это случится - платформа имеет шанс

Неактивен

0    0    #24
11.04.2008 15:18

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Знатокам WinAPI, help!

Korwin написал:

Кстати, как будет называться платформа? RusBear? или "Mышка"?

Text Quest Engine прижилось как рабочее название. smile
TQE в сокращении.

Неактивен

0    0    #25
11.04.2008 16:26

Nex
Участник (+120, -130)
Зарегистрирован: 11.06.2007
Сообщений: 2053

---

Re: Знатокам WinAPI, help!

ASBer написал:

TQE в сокращении.

Будут путать с TGE.

Неактивен

0    0    #26
11.04.2008 17:24

Korwin
Гоблин, зеленый от недосыпа (+188, -16)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 796
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

Re: Знатокам WinAPI, help!

Nex написал:

ASBer написал:

TQE в сокращении.

Будут путать с TGE.

Это точно. Может, учитывая, что под квестами обычно понимают менюшки, сменить название на Text Adventure Russian Engine  или Text Adventure Russian Kit?

Отредактировано Korwin (11.04.2008 17:35)

Неактивен

0    0    #27
11.04.2008 17:35

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Знатокам WinAPI, help!

СИстема Реализации Интерактивного Нарратива, сокращенно СИРИН. smile
Простенько и со вкусом.

Неактивен

0    0    #28
11.04.2008 17:56

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Знатокам WinAPI, help!

Это точно. Может, учитывая, что под квестами обычно понимают менюшки, сменить название на Text Adventure Russian Engine  или Text Adventure Russian Kit?

Вообще есть что-то глубоко символичное в том, чтобы давать Исконно Русской Платформе (тм) английское название...

Неактивен

0    0    #29
11.04.2008 18:40

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Знатокам WinAPI, help!

Text Adventure Russian System тогда может быть? (TARS)
А к русским названиям софта существует устоявшееся негативное отношение.
Да и неудобно это - расширения и имена файлов должны вытекать из названия системы, а делать их русскими у меня рука никогда не подвернется.
А так:
tars_con.exe - консольный проигрыватель
tars.dll - двигатель
xxx.trs - файлы игр

Неактивен

0    0    #30
11.04.2008 18:47

Nex
Участник (+120, -130)
Зарегистрирован: 11.06.2007
Сообщений: 2053

---

Re: Знатокам WinAPI, help!

Да, английские аббревиатуры для "исконно русской платформы" не катят.
Пусть называется РКД - Русский Квестовый Движок!

Или вообще без аббревиатур, как Милена.

Неактивен

0    0    #31
11.04.2008 19:01

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Знатокам WinAPI, help!

Тогда пусть будет просто РА!
Язык Ра,
файлы:
ra_con.exe
ra.dll
xxx.ra

p.s. РКД очень на РКПб смахивает...

Неактивен

0    0    #32
11.04.2008 21:44

Nex
Участник (+120, -130)
Зарегистрирован: 11.06.2007
Сообщений: 2053

---

Re: Знатокам WinAPI, help!

Неактивен

0    0    #33
11.04.2008 22:04

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Знатокам WinAPI, help!

Nex lollollol

Неактивен

0    0    #34
12.04.2008 02:56

Korwin
Гоблин, зеленый от недосыпа (+188, -16)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 796
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

Re: Знатокам WinAPI, help!

А без названия система будет страдать и плакать "штука без названия", "noname system" долго выговаривать и как-то несолидно.
"Как Вы яхту назовете, так она и поплывет!" - в общем, к названию следует относиться серьезно. Пока мне больше всего понравились Сирин, ТАРС и Ра. Причем без аббревиатур - просто по звучанию. Можно ведь никак не расшифровывать. smile

а теперь извините за начатый мною же оффтопик но мы отклонились от темы. Как там проблема, решена?

Неактивен

0    0    #35
12.04.2008 10:23

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Знатокам WinAPI, help!

Korwin написал:

Как там проблема, решена?

Временно добавил сообщение при старте, но это нельзя считать хорошим решением, нужно копать в глубь...
Проблема, как мне кажется, где-то в атрибутах консольного окна.

И еще один вопрос из той-же области: переключение раскладки на русский язык при старте.
LoadKeyboardLayout("00000419",KLF_ACTIVATE); для консольного окна почему-то не работает...

Неактивен

0    0    #36
12.04.2008 19:53

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Знатокам WinAPI, help!

fireton написал:

СИстема Реализации Интерактивного Нарратива, сокращенно СИРИН. smile
Простенько и со вкусом.

нечто подобное уже есть smile

Неактивен

0    0    #37
13.04.2008 04:54

Korwin
Гоблин, зеленый от недосыпа (+188, -16)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 796
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

Re: Знатокам WinAPI, help!

Сходство в названии на четыре буквы. Как у кинолога и киноактера, демиурга и демикотона. Не страшно smile, а зато название Сирин действительно очень русское. И имеет отношение и мифу, сказке, а значит и литературе. Впрочем, как и Ра - которое короче. Надо покопаться, может и ТАРС что-то в языке значит.

Неактивен

0    0    #38
09.05.2008 18:37

awa
Участник
Зарегистрирован: 09.05.2008
Сообщений: 1

Re: Знатокам WinAPI, help!

ASBer написал:

Проблема с вызовом стандартых диалогов:
При первом вызове GetOpenFileName() диалог Open прячется ПОД консольное окно программы, несмотря на то что в MSDNе обещано показавать стандартные диалоги поверх всех окон, как и положено модальным окнам.
Второй и все последующие вызовы GetOpenFileName() отрабатывают правильно и отображают диалог поверх основного окна программы.

Вопрос: как это лечить? smile

P.S. я и сам конечно еще покапаю, но вдруг есть тут Знатоки? Не может не быть...

Привет, ASBer!
Проблему твою повторить не удалось - создал консольное приложение и сразу вызвал там диалог выбора файла по твоему коду. Окно диалога выскакивает поверх консольного окна! Вывод - либо ты что-то нехорошее делаешь до вызова диалога ввода окна, либо у тебя проблема с виндозой. Сделай такой же тест, по результатам будет понятно, с чем бороться - с твоим кодом или виндозой. Кстати, у тебя там ошибка - строка фильтров должна заканчиваться двумя нулевыми символами, а не одним.
ЗЫ. На звонки ты не отвечаешь, в асе тебя нет, поэтому написал сюда.

Неактивен

0    0    #39
12.05.2008 09:30

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Знатокам WinAPI, help!

Привет, awa!

awa написал:

Проблему твою повторить не удалось - создал консольное приложение и сразу вызвал там диалог выбора файла по твоему коду. Окно диалога выскакивает поверх консольного окна!

Вот минимальный код, в котором проявляется ошибка:

Код:

#include <windows.h>
#pragma hdrstop
//---------------------------------------------------------------------------
//переменные для консоли
HANDLE WindowH, InputH;
_CONSOLE_SCREEN_BUFFER_INFO Info;
OPENFILENAME ofn;
char input[1024];
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{ //получаем дескрипторы консоли
  InputH =GetStdHandle(STD_INPUT_HANDLE);
  WindowH=GetConsoleWindow();
  //инициализируем структуры для диалогов save/load
  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;
  DWORD r;
  //-------------------------------------------------------
  if(ReadConsole(InputH,input,160,&r,NULL)) input[r]=0;
  else input[0]=0;
  input[0]=0;//обнуляем буфер
  if(GetOpenFileName(&ofn))//здесь диалог ПОД консолью
    MessageBox(WindowH,input,"Hello World!",MB_SYSTEMMODAL);
  //-------------------------------------------------------
  if(ReadConsole(InputH,input,160,&r,NULL)) input[r]=0;
  else input[0]=0;
  input[0]=0;//обнуляем буфер
  if(GetOpenFileName(&ofn))//здесь диалог НАД консолью
    MessageBox(WindowH,input,"Hello World!",MB_SYSTEMMODAL);
  //-------------------------------------------------------
  return 0;
}
//---------------------------------------------------------------------------

Диалог прячется под консоль только после первого вызова ReadConsole(). Если ввод с консоли не читать - все ок.

awa написал:

Кстати, у тебя там ошибка - строка фильтров должна заканчиваться двумя нулевыми символами, а не одним.

ofn.lpstrFilter = "Text Quest\0*.TQE\0Text\0*.TXT\0"; //2й нулевой символ поставляет компилятор smile

Отредактировано ASBer (12.05.2008 09:31)

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru