Проблемы с HtmlHelp API.

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

17 фев 2005, 15:46

Проблема такова: есть такая замечательная API, под названием HtmlHelp:

Код: Выделить всё

HWND HtmlHelp(
    HWND    hwndCaller,
    LPCSTR  pszFile,
    UINT    uCommand,
    DWORD   dwData) ;
Первый параметр - дискриптор вызвающего окна. В MSND написано, что если указать в качестве первого параметра дискриптор десктопа, то, цитирую "the operating system determines where focus is returned", то бишь ОС сама определит куда вернуть фокус.

При текущем использовании HtmlHelp используется именно это замечание, но операционная система наперекор документации не возвращает фокус в то окно, откуда хелп был вызван. Не помогает и явное указание дискриптора вызывающего окна. Результат один тот же: после закрытия хелпа, окно приложения остаётся неактивным.

Может кто сталкивался с такой проблемой и знает, чем помочь?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

17 фев 2005, 16:37

Ну, куда ОС вернет фокус в случае GetDesktopWindow() - тут еще бабушка надвое сказала... ИМХО, в этом случае ОС сама решает, куда его вернуть, так я понимаю. А вот почему не работает в случае явного указания окна-владельца - это вопрос.
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

17 фев 2005, 17:52

Фишка в том, что HtmlHelp работает сейчас так, будто никаких уточнений в спецификации не было, нет и не будет. Т.е. дали в качастве hwndCaller дискриптор десктопа - десктоп и активируется после закрытия хэлпа, а со всех остальных окон фокус снимается. Мутное это дело - спецификация copyright by Microsoft :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

21 фев 2005, 15:17

Проблема разрешилась. Всё дело было в хэлпе и, похоже, это глюк Microsoft. Для того, чтобы больше никто не наступил эти грабли: если такой параметр , как "имя окна" в проекте хэлпа содержит пробел, HtmlHelp начинает глючить. Симптомы описаны выше.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить