|
Никто не знает примера как в .Net на чистом API Treeview сделать?
|
|||
---|---|---|---|
#18+
Чет не могу в гугле найти ничего потребного. Treeview то создал, а с TVITEM, TVINSERTSTRUCT, TVM_INSERTITEM пока плаваю, TVM_INSERTITEM возвращает нуль, ни одного итема пока добавить не сумел. (на VB6 тоже этого никогда не делал) Я понимаю что жесть, но у меня не получается применить TVS_EX_RICHTOOLTIP стиль к .Net-Treeview, а очень хочется . Код: vbnet 1. 2. 3.
Смысл этого стиля: тултип содержит картинку итема, при этом четко накладывается на итем (на текст с картинкой). Можно посмотреть в дереве проводника Windows как это выглядит (на 10-ке, 8-ке, 7-ке), выглядит неплохо. Я все перепробовал, если делать это в VB6 - получается, если делать это с "чужим" TreeView из .Net -получается. С .Net treeview -никак. Коды .Net treeview пытался смотреть, походу там свой сабклассинг, ловится TTN_SHOW и стандартное поведение переопределено. Даже простые текстовые тултипы не накладываются четко на текст, а смещены чуть влево-вверх налезая на картинку, похоже hard-coded. И через эту дрянь не перепрыгнуть, т.е. свой класс Inhereted Treeview то создать можно, но либо отменять MyBase.WndProc (тогда ничего не работает), либо не отменять, но он же тогда выкидывает в WndProc Net-Treeview , перескочить через которую нельзя - со всеми вытекающими. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 09:53 |
|
Никто не знает примера как в .Net на чистом API Treeview сделать?
|
|||
---|---|---|---|
#18+
Дмитрий77, Забил бы ты уже на win api и смотрел в сторону wpf. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 10:00 |
|
Никто не знает примера как в .Net на чистом API Treeview сделать?
|
|||
---|---|---|---|
#18+
ЕвгенийВ, не мешайте кактус кушать ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 10:26 |
|
Никто не знает примера как в .Net на чистом API Treeview сделать?
|
|||
---|---|---|---|
#18+
Не надо давать ответов не по теме вопроса. Мне нужен пример (в смысле кусок кода который бы работал) создания API-Treeview в .Net Конкретно интересует добавление итемов (можно без картинок), чтоб работал. Дальше я разберусь. По словам pinvoke .Net C# TVITEM TVINSERTSTRUCT TVM_INSERTITEM я ничего потребного не нашел. (CreateWindowEx понятно сделал) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 10:33 |
|
Никто не знает примера как в .Net на чистом API Treeview сделать?
|
|||
---|---|---|---|
#18+
Дмитрий77, Using Tree-View Controls не помогло? Там и примеры на плюсах есть... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 11:13 |
|
Никто не знает примера как в .Net на чистом API Treeview сделать?
|
|||
---|---|---|---|
#18+
Дмитрий77Не надо давать ответов не по теме вопроса. Мне нужен пример (в смысле кусок кода который бы работал) создания API-Treeview в .Net Конкретно интересует добавление итемов (можно без картинок), чтоб работал. Дальше я разберусь. По словам pinvoke .Net C# TVITEM TVINSERTSTRUCT TVM_INSERTITEM я ничего потребного не нашел. (CreateWindowEx понятно сделал) Выкладывай код, которым все это пытаешься делать. <ванга mode on> скорее всего определения структур не правильные <ванга mode off> ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 11:22 |
|
Никто не знает примера как в .Net на чистом API Treeview сделать?
|
|||
---|---|---|---|
#18+
buser, Да именно по этому учебнику и делал С вот этим How to Add Tree-View Items вконец запутался Код: 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. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62.
TVM_INSERTITEM возвращает нуль и ничего не добавляет Пробовал в hInsertAfter засовывать TVI_FIRST или TVI_ROOT вместо нуля, не помогает. И вот где я напортачил ХЗ, есть идеи? Т.е. задача добавить хоть один какой-нибудь итем для начала, пусть без текста, без картинки. Не добавляется зараза. Был бы пример, от него бы сплясал как нибудь. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 11:38 |
|
Никто не знает примера как в .Net на чистом API Treeview сделать?
|
|||
---|---|---|---|
#18+
Antonariy, привет, выложил только что. Проблема у меня на самом деле только с категорическим нежеланием .Net контрола принимать на вход TVS_EX_RICHTOOLTIP который мне очень хочется, см. первый пост. Причем категорически не применяется именно к .Net контролу (и лезть в Override WinProc безполезно, потому что у него своя которую не обойти). Если например применить этот стиль к Treeview из htmlhelp (если помнишь мои картинки), то без проблем. И в VB6 с его контролом тоже без проблем. Просто счас сделал высокие Treeview (24px как в Win10) + Or TVS_FULLROWSELECT Or TVS_TRACKSELECT +SetWindowTheme(TreeView1.Handle, "explorer", vbNullString) И оно как бы симпатично весьма, но стандартные тултипы обычной высоты, да еще съехавшие вверх-влево на пару пикселей от ориг. текста (спасибо .нету) смотрятся не ахти. Забил бы, но ты ж меня знаешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 11:56 |
|
Никто не знает примера как в .Net на чистом API Treeview сделать?
|
|||
---|---|---|---|
#18+
Дмитрий77Antonariy, привет, выложил только что.я имел ввиду тестовый проект. где CreateWindowEx уже работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 15:03 |
|
Никто не знает примера как в .Net на чистом API Treeview сделать?
|
|||
---|---|---|---|
#18+
А в VB6 все получилось. Даже тупо с pszText As String в TVITEM и без задания cchTextMax. Итем в стиле 90-х так сказать нарисовался и текст отобразил (как и ожидалось). Пойду что ли "с маршалами, пэтээрами и юникодами" повоюю. Давно не разминался наверное. Код: 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. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 15:09 |
|
Никто не знает примера как в .Net на чистом API Treeview сделать?
|
|||
---|---|---|---|
#18+
Antonariy, Короче я лоханулся. У меня было так Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Вместо Код: vbnet 1.
Я забыл присвоить результат CreateATreeView в переменную hwndTV AntonariyДмитрий77Antonariy, привет, выложил только что.я имел ввиду тестовый проект. где CreateWindowEx уже работает. Смысла выкладывать так понимаю нет. Ничего кроме MSDN-рутины (которой надеюсь будет не очень много) на этом пути вряд ли ожидается. Могу другой проект выложить: с .Net-treeview подогнанным под стиль проводника(как на картинке выше), но при этом с нерешенным вопросом про тултипы как я хочу. Вот мне кажется, что именно с .Net контролом вопрос не решается никак. Или каких приемов не знаю. Может глянешь? Мне честно не очень хочется API Treeview делать, я и в VB6 их никогда не делал. Хотя они у меня статические и не шибко здоровые. 10-20 итемов на API можно просто запомнить в переменных и не извращаться реализацией key/name. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 15:41 |
|
Никто не знает примера как в .Net на чистом API Treeview сделать?
|
|||
---|---|---|---|
#18+
Дмитрий77 Могу другой проект выложить: с .Net-treeview подогнанным под стиль проводника(как на картинке выше), но при этом с нерешенным вопросом про тултипы как я хочу. Вот мне кажется, что именно с .Net контролом вопрос не решается никак. Или каких приемов не знаю. Может глянешь?ты уже далеко по этому пути ушел, вряд ли я что-то новое обнаружу. могу предложить отключить тривьюшный тултип и прикрутить винформовский. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 16:37 |
|
Никто не знает примера как в .Net на чистом API Treeview сделать?
|
|||
---|---|---|---|
#18+
Antonariyмогу предложить отключить тривьюшный тултип и прикрутить винформовский. Ну а толку. свойство ShowNodeToolTips - это Or TVS_INFOTIP -это нафиг не надо, об этом речи не идет. Отключить стандартный тултип TTN_SHOW(расширением к которому является TVS_EX_RICHTOOLTIP) можно: Or TVS_NOTOOLTIPS, но тогда ничего и не будет. А ситуация такая (может чего не понимаю, поэтому проу глянуть): Стандартный Treeview генерирует WM_NOTIFY+TTN_SHOW Смотрим сюда: http://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/TreeView.cs Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Код: c# 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.
И если я правильно понимаю(?), вместо того чтобы отдать TTN_SHOW в дефолтную обработку API контрола, Net сам "разбирается с тултипом" (и естественно стиль TVS_EX_RICHTOOLTIP идет лесом). Т.е. "тривьюшный тултип" он уже ни фига не тривьюшный (да он и смещен вверх-влево, дефолтный всегда четко накладывается на родной текст узла) Я конечно могу сделать свою Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
А дальше у меня какие варианты? Могу сделать Exit sub, но тогда я в дефолтное API-поведение уже не попадаю Могу сделать MyBase.WndProc(m), но тогда я попадаю опять в лапы кода который я цитировал выше А как мне обойти .Net код, при этом прийти в дефолтную API-процедуру, при кот. срабатывает TVS_EX_RICHTOOLTIP? Еще есть подозрение(?) что что-то не так с ImageList, по крайней мере скормить API-ImageList через TVM_SETIMAGELIST мне не удается. Тогда соответственно вопрос, а содержится ли вообще картинка в TTN_SHOW... Вообще конечно проще на это забить с моими м.б. 3-4 узлами с относит. длинным текстом. Ну надо красоту, раздвинь дерево вправо ибо возможность есть. А с API, там неделю сидеть ковыряться, еще проблема с фокусом будет и куча всего еще, ну его. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 17:40 |
|
Никто не знает примера как в .Net на чистом API Treeview сделать?
|
|||
---|---|---|---|
#18+
Дмитрий77, может поможет, часть 100% рабочего исходника Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 20:49 |
|
Никто не знает примера как в .Net на чистом API Treeview сделать?
|
|||
---|---|---|---|
#18+
Дмитрий77А дальше у меня какие варианты? Могу сделать Exit sub, но тогда я в дефолтное API-поведение уже не попадаюну так это же и нужно. сам рисуешь свой тултип по этому событию, а дефолтное поведение идет лесом. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2016, 12:22 |
|
Никто не знает примера как в .Net на чистом API Treeview сделать?
|
|||
---|---|---|---|
#18+
Прикольно читать топики Дмитрий77. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2016, 13:07 |
|
Никто не знает примера как в .Net на чистом API Treeview сделать?
|
|||
---|---|---|---|
#18+
Antonariyну так это же и нужно. сам рисуешь свой тултип по этому событию, а дефолтное поведение идет лесом. Не, не хочу. Нужно чтоб лесом шло Net- дефолтное а не API- дефолтное, которое в .Net-контроле именно и идет лесом. Я все же решил набросать свой TreeView. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2016, 15:51 |
|
Никто не знает примера как в .Net на чистом API Treeview сделать?
|
|||
---|---|---|---|
#18+
Дмитрий77Я все же решил набросать свой TreeView. Вам же уже писали про WPF ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2016, 21:39 |
|
Никто не знает примера как в .Net на чистом API Treeview сделать?
|
|||
---|---|---|---|
#18+
Cat2, А я уже отвечал про WPF. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2016, 21:45 |
|
|
start [/forum/topic.php?fid=20&fpage=58&tid=1400455]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 258ms |
total: | 406ms |
0 / 0 |