|
Как отследить событие появления окна Help (нужен его hwnd) по F1?
|
|||
---|---|---|---|
#18+
Попробую сформулировать: Есть App У него есть файл справки .chm. Код: vbnet 1.
При вызове справки вызывается окно справки (htmlhelp). Это окно можно вызвать 1) нажав F1 2) через API напр. так Код: vbnet 1.
Это одно и то жк единственное окно (неважно как вызывали), "привязано" к App и закрывается вместе с App. При использовании HTML Help API Function всегда возвращается hwnd этого окна. Здесь более менее ясно. Вопрос: 1) Как отследить момент когда окно Help появилось? OnHelp (????) Хотя бы если это явилось следствием нажатия F1. Но важен не факт нажатия F1 а факт появления окна Help привязанного к App. 2) Соответственно найти его hwnd по факту появления. Конечной целью является кастомизация-стилизация окна хэлпа по факту его появления. Как здесь: 14699711 (это реально) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2013, 17:18 |
|
Как отследить событие появления окна Help (нужен его hwnd) по F1?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2013, 19:40 |
|
Как отследить событие появления окна Help (нужен его hwnd) по F1?
|
|||
---|---|---|---|
#18+
Нажатие F1 генерит сообщение WM_HELP message В этот момент hwnd доступно, взять его можно через HH_GET_WIN_HANDLE command Но для этого нужен "the name of the window type whose handle you want to return". Это задается в hhp файле chm -проекта: Код: html 1. 2.
MyProgaHelp -это и есть "window type" 1 в конце это "notification ID (referred to as idNotify)" -обеспечивает генерацию Notification Messages от окна хэлпа через сабклассинг вызывающего окна. http://msdn.microsoft.com/en-us/library/office/aa164216(v=office.10).aspx Итого имеем: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42.
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Ну а стиль применяется так, делаю стандартное вистовское TreeView: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Т.е. либо F1 -> WM_HELP -> hwndHelp Либо hwndHelp=HTMLHelp(HH_DISPLAY_TOPIC) - HHN_WINDOW_CREATE срабатывает раньше Частный случай - когда Context (дерево Navigation Pane) в справке скрыт на момент открытия, для этого и нужны махинации с HHN_NAVCOMPLETE, HHN_TRACK и Help_Created - не 100% грамотно но все же. Думаю как сделать чтобы Navigation Pane всегда отображалась при открытии .chm -независимо от того как обстояло дело при последнем закрытии файла .chm. С иконками бы в дереве еще разобраться, "обновить" бы их. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2013, 01:38 |
|
Как отследить событие появления окна Help (нужен его hwnd) по F1?
|
|||
---|---|---|---|
#18+
Дмитрий77С иконками бы в дереве еще разобраться, "обновить" бы их. Стандартный метод описан здесь: Change or Create Icons for Contents Entries Но попахивает гнилью. Там предполагается рисовать свой image-strip - полоску-битмап из 14-42 картинок (не ICO !!!), при этом похоже еще таскать эту фигню за .chm проектом. Либо от затеи надо отказываться (потому как опять увлекся), либо... Думаю можно создать свой API-ImageList из 32-битных иконок (как я делаю в своих TreeView) и попытаться подменить стандартный ImageList (-ы ??) на свой через API - в своей ф-ции ApplyHelpStyle, которая выше. Главное, чтоб htmlhelp -хрень не пыталась перерисовывать свои книжки обратно, в чем я не уверен. Но попробовать можно. По идее должно сработать. TreeView там не VB-шный (не OCX-совкий), перерисовывать картинки назад думаю не должен. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2013, 02:23 |
|
Как отследить событие появления окна Help (нужен его hwnd) по F1?
|
|||
---|---|---|---|
#18+
Дмитрий77Думаю можно создать свой API-ImageList из 32-битных иконок (как я делаю в своих TreeView) и попытаться подменить стандартный ImageList (-ы ??) на свой через API - в своей ф-ции ApplyHelpStyle, которая выше. Главное, чтоб htmlhelp -хрень не пыталась перерисовывать свои книжки обратно, в чем я не уверен. Но попробовать можно. По идее должно сработать. TreeView там не VB-шный (не OCX-совкий), перерисовывать картинки назад думаю не должен. Да вроде все получилось. Думаю как ниже лучше смотрится. Если еще с тулбаром побороться по этому же принципу...картинки выдрать из какого-нибудь нового IE и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2013, 05:15 |
|
Как отследить событие появления окна Help (нужен его hwnd) по F1?
|
|||
---|---|---|---|
#18+
Дмитрий77Если еще с тулбаром побороться по этому же принципу...картинки выдрать из какого-нибудь нового IE и т.п. Как-то так... как на картинке. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2013, 05:17 |
|
Как отследить событие появления окна Help (нужен его hwnd) по F1?
|
|||
---|---|---|---|
#18+
По идее можно еще попробовать нарисовать тематический ребар и вставить тулбар в него (тулбар в html-help на голой форме). Все-таки API это сила. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2013, 05:21 |
|
|
start [/forum/topic.php?fid=60&msg=38365107&tid=2156805]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 164ms |
0 / 0 |