Не знаю даже, в какой форум поместить.
Делаю проект ATL+WTL, MDI (Unicode+MSLU).
При обработке OnFileNew, как и положено, создаю новое дочернее окно. Имя окна генерируется следующим образом:
после чего использую полученный szBuffer в качестве имени нового окна. Переменная m_nWindowCounter инициализируется в конструкторе нулем.
Тут начинается самое интересное. Если проект без MSLU, то он, естественно, в Win9x не запускается. Если с MSLU — то работает, но (!) при запуске под Win98 при создании первого окна в качестве имени окна образуется текст вида "?????", а при создании второго и далее — все как положено, "Untitled 1", "Untitled 2" и т.д. В WinXP все в порядке.
PS. Используется VС++ 2005 Express + PSDK от 2005 года, поэтому продебажить в 98 виндовсе нет возможности.
Ничего не помогает.
Манипуляции с ::DefWindowProc(...) ничего не дают,
сейчас она стоит в самом начале _tWinMain.
ATL::AtlAxWinInit не вызывается, ибо она, по всей вероятности,
должна находиться в lib, которой нет, соответственно, unresolved external.
Перенос буфера в определение класса и формирование имени
окна в нем — занятие странное, но и оно тоже ни к чему не привело.
При компиляции без UNICODE все нормально.
Ставил мессагебоксы. Буфер, в который я заношу имя нового окна, формируется правильно,
т.е. в моменты до и после вызова CMDIChildWindowImpl<>::Create()
в случае создания первого окна с именем "Untitled 1"
в нем сидит, как положено, "Untitled 1", а окно получает имя "?????".
Я думал, что поможет вызов SetWindowText после создания окна,
но он тоже приводит к этому результату.
И вот такие траблы именно только с первым окном. Следующее нормально
получает имя "Untitled 2" и т.д.
Полагал, что дело в используемой тут DockWins+TabControls, но просмотрев,
как там создаются окошки, отказался от этой мысли.
Здравствуйте, denaturat, Вы писали:
D>ATL::AtlAxWinInit не вызывается, ибо она, по всей вероятности, D>должна находиться в lib, которой нет, соответственно, unresolved external.
Это аналог ATL::AtlWinInit, но для проектов, хостящих ActiveX. Соответственно, вопрос повторяется, но про AtlWinInit.
D>Перенос буфера в определение класса и формирование имени D>окна в нем — занятие странное, но и оно тоже ни к чему не привело. D>При компиляции без UNICODE все нормально.
А он и не мог помоч. CreateWindowW в MSLU всё равно сделает временный буфер на стеке, преобразует туда строку и отправит в CreateWindowA.
Где была изначальная строка роли не играет.
D>И вот такие траблы именно только с первым окном. Следующее нормально D>получает имя "Untitled 2" и т.д.
Собака явно рылась в RegisterClass. Попробуйте явно задать класс окна. Или даже вызвать RealRegisterClass ручками.
D>Машинку жалко. Столько раз перегружал.
А VPC/VMWare для кого придумали? Win98 в VPC живет лучше чем на настоящем железе этого года выпуска.
P.S. Ещё пара вопросов:
Win98 какая (их много было разных)?
IE какой? Установлен Common controls update? А Dcom update for win9x?
Здравствуйте, Блудов Павел, Вы писали:
БП>Собака явно рылась в RegisterClass. Попробуйте явно задать класс окна. Или даже вызвать RealRegisterClass ручками.
Да, действительно в этом. Задал класс окна в DECLARE_WND_CLASS, и все заработало.