|
Как четко отловить нажатие правой кнопки мыши на API-ребар и API-тулбар
|
|||
---|---|---|---|
#18+
Нужно вызвать контекстное меню настройки панелей (VB меню через popup) правой кнопкой мыши. Два случая, которыми я "злоупотребляю". 1. API-ребар, на нем API-тулбар, где кончается тулбар ХЗ, я это не отслеживаю 2. API-ребар, в нем один band с неопределенным wID, т.е. просто за ради написать на банде заголовочный текст, где кончается band в произвольном случае также ХЗ. В общем чего надо ловить (и где, и от кого, предполагаю в me.hwnd), чтоб при нажатии на любую область этого хозяйства, хоть на кнопку, хоть на пустое место (toolbar, band, просто пусто) но ПРАВОЙ кнопкой вызывалось меню? Пока нарыл (но не испытывал) NM_RCLICK (toolbar) NM_NCHITTEST (rebar) -но неясно где там правая кнопка мыши ? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2013, 06:58 |
|
Как четко отловить нажатие правой кнопки мыши на API-ребар и API-тулбар
|
|||
---|---|---|---|
#18+
Ну вроде вот так(код ниже) гарантированно (если сабклассить родителя ребара). NM_RELEASEDCAPTURE немного смущает, потому как по описанию NM_RELEASEDCAPTURE (rebar) notification code Notifies a rebar control's parent window that the control is releasing mouse capture. Но срабатывает только при mouse_up ПРАВОЙ клавиши мыши (вроде). Для: >1. API-ребар, на нем API-тулбар, где кончается тулбар ХЗ, я это не отслеживаю NM_RCLICK вроде достаточно (тулбар у меня вроде как на весь ребар всегда), а вот для >2. API-ребар, в нем один band с неопределенным wID, т.е. просто за ради написать на банде заголовочный текст, где кончается band в произвольном случае также ХЗ. ничего лучше NM_RELEASEDCAPTURE я не придумал, если только не сабклассить сам контрол на предмет Mouse_Up, чего делать чего-то не очень хочется. Код: 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. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2013, 09:50 |
|
Как четко отловить нажатие правой кнопки мыши на API-ребар и API-тулбар
|
|||
---|---|---|---|
#18+
Я правильно понимаю, что в данном случае достаточно копировать в Dim uNMHDR As NMHDR, не вникая в подробности Dim uNMMOUSE As NMMOUSE ? Т.е. вот такой код вместо предыдущего: Код: 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.
А спрашиваю потому, что у меня в реальном приложении в той же ф-ции ловится еще: LVN_ITEMCHANGED TBN_HOTITEMCHANGE TTN_GETDISPINFO и везде первая часть структуры NMHDR а подробности NMMOUSE мне как бы и не нужны. И здесь еще академический вопрос. Если я сразу делаю как в коде выше: Код: vbnet 1. 2.
-до выяснения uNMMOUSE.hdr.code Не рискую ли я нарваться на "ошибку памяти" с вылетом приложения, если длина реальной начинки короче длины uNMMOUSE? По сути ведь копирую лишнюю память. По идее ведь сначала надо копировать в NMHDR Потом выяснять hdr.code (и желательно .hwndFrom) и только потом в зависимости от результата копировать в расширенную структуру, если это вообще надо Так? Или можно забивать и копировать все подряд в то, что ожидается в требуемом Msg? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2013, 11:48 |
|
Как четко отловить нажатие правой кнопки мыши на API-ребар и API-тулбар
|
|||
---|---|---|---|
#18+
Дмитрий77NM_RELEASEDCAPTURE немного смущает, потому как по описанию NM_RELEASEDCAPTURE (rebar) notification code Notifies a rebar control's parent window that the control is releasing mouse capture. Но срабатывает только при mouse_up ПРАВОЙ клавиши мыши (вроде). Если банд со стилем Or RBBS_GRIPPERALWAYS то срабатывает и на левую кнопку мыши. Поэтому с ребаром думаю правильно все-таки ловить отжатие правой клавиши мыши в самом ребаре: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2013, 13:46 |
|
|
start [/forum/topic.php?fid=60&msg=38224782&tid=2157044]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 292ms |
total: | 408ms |
0 / 0 |