|
А как Net-овского рисования получить Ptr на Type: HBITMAP?
|
|||
---|---|---|---|
#18+
Объясняю вопрос. На форме есть ребар (API), в нем есть Band. Band описан структурой REBARBANDINFO structure В которой в частности имеет честь быть hbmBack Type: HBITMAP Handle to a bitmap that is used as the background for this band. Предполагаемый (рабочий) код на стороне API ( потребитель битмапа ): Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
Предполагаемый рабочий .NET код (надо допиливать, но думаю справлюсь) - поставщик битмапа : Код: 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.
-рабочесть состоит в том что оно рисует что мне надо. Мне надо как-то засунуть это дело в <HBITMAP>. Сразу скажу что в VB6 использовалось: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
P.S. Если бы это был Net.какой-то_стрип, то Код: vbnet 1. 2. 3.
Но об этом речь не идет, то бишь очень прошу воздержаться от общих рассуждений. В данном случае нужен HBitmap . ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2013, 02:41 |
|
А как Net-овского рисования получить Ptr на Type: HBITMAP?
|
|||
---|---|---|---|
#18+
Похоже на правду? Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2013, 05:31 |
|
А как Net-овского рисования получить Ptr на Type: HBITMAP?
|
|||
---|---|---|---|
#18+
Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Вопрос на засыпку. Что говорит .NET на тему Код: 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.
Т.е. по хорошему: заданы 4 цвета по краям прямоугольника (градиент по вертикали и горизонтали). ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2013, 05:49 |
|
А как Net-овского рисования получить Ptr на Type: HBITMAP?
|
|||
---|---|---|---|
#18+
В NET этих градиентов как грязи, в wpf так вообще Directx рисует. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2013, 16:58 |
|
А как Net-овского рисования получить Ptr на Type: HBITMAP?
|
|||
---|---|---|---|
#18+
см PathGradientBrush ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2013, 17:00 |
|
А как Net-овского рисования получить Ptr на Type: HBITMAP?
|
|||
---|---|---|---|
#18+
fortibransa, посмотрю на PathGradientBrush. Ну, по идее в "API-шном" коде что я доделал: Код: 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. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260.
Есть только одна API, которая "рисует": Код: vbnet 1. 2. 3. 4. 5. 6.
Все махинации с bitmap и hdc думаю можно проделать с Graphics (как в Net коде с линейными градиентами, что я привел выше) и вернуть hBitmap. CopyMemory не в счет (вместо LSet), мне подсказали другой метод в соседнем топике , счас буду пробовать. Если есть аналог GradientFill, то с учетом предыдущих замечаний код можно перевести в .NET в лоб (предположение). ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2013, 01:35 |
|
А как Net-овского рисования получить Ptr на Type: HBITMAP?
|
|||
---|---|---|---|
#18+
Дмитрий77Все махинации с bitmap и hdc думаю можно проделать с Graphics (как в Net коде с линейными градиентами, что я привел выше) и вернуть hBitmap. CopyMemory не в счет (вместо LSet), мне подсказали другой метод в соседнем топике , счас буду пробовать. Ну с этим поборолся: Код: 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. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242.
Остался один вопрос, если добивать именно этот код под "чисто .NET" Дмитрий77Если есть аналог GradientFill... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2013, 04:36 |
|
А как Net-овского рисования получить Ptr на Type: HBITMAP?
|
|||
---|---|---|---|
#18+
Дмитрий77 Остался один вопрос, если добивать именно этот код под "чисто .NET" Если есть аналог GradientFill... Вообще-то при внимательном просмотре материала из статьи Microsoft: How to: Display a Gradient Fill становится ясно, что мой код под спойлером тупо соответствует тому что там написано и GradientFill объявлен именно как API (в классе Win32Helper). Или я должен ставить самоцель не использовать API, если я использую .NET? А все остальное "дурной тон" (включая статью Microsoft)? fortibransaВ NET этих градиентов как грязи...см PathGradientBrush А ты уверен что эта штука умеет сделать что мне нужно? А нужно мне вот это (эта тема не устанавливается через SetWindowTheme и ее надо рисовать): Custom Vista-style (blue/green) ...<суффикс про тулстрип опустим> Но в этом примере используется линейный градиент сверху вниз (2 полоски), а на него автор примера накладывает (прозрачный слева -> зеленый справа). Мой код (под спойлером) строит градиент по 4-м цветам в крайних точках прямоугольника. А твой PathGradientBrush (я поигрался) рисует из центра к краям, цвета и их к-во можно менять. Но как сделать именно то что нужно мне (горизонталь+вертикаль) я не понимаю. Или ты указал мне на этот метод не глядя (типа, вона как круто можно сделать), или я не просек как сделать именно то что мне нужно. Так покажи как. У меня только одна идея как сделать требуемое средствами .NET: 1) подсчитать два массива цветов (например справа и слева) -по вертикали 2) закрасить горизонтальные прямоугольники высотой 1 пиксель через LinearGradientMode.Horizontal (Число прямоугольников равно грубо высоте исходного прямоугольника) Хотя честно мне уже надоело, задача итак решена. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2013, 06:20 |
|
А как Net-овского рисования получить Ptr на Type: HBITMAP?
|
|||
---|---|---|---|
#18+
Winforms плохо подходит для свистоперделок. В .Net для этого грубо говоря WPF существует. Но там все до единого контролы "ненастоящие" - рисуются не winapi, а собственно библиотекой(direct 3d для wpf неоязателен, при невозможности использования,например, на терминальном сервере рисование осуществляется через gdi, ну шейдеры лесом пойдут, остальное будет работать) В winrt .net тож не родной api, родной как всегда COM Если есть такое горячее желание использовать winapi - все крома C++ вряд ли является адекватным инструментом. А что касается нежелания писать createwindow - поможет свой набор классов кстати нормально масшабировать и перемещать контролы при изменении размеров окна winforms толком не умеет ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2013, 07:11 |
|
А как Net-овского рисования получить Ptr на Type: HBITMAP?
|
|||
---|---|---|---|
#18+
Дмитрий77 Код: 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. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242.
Там у меня где-то ошибка в исходном коде: нижняя черная полоса (1 пиксель) не прорисовывается. Через API bitmap по дефолту "черный", и в .Net коде это вылезло. Разбираться неохота, но workaround напр. такой: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
ИзопропилWinforms плохо подходит для свистоперделок. В .Net для этого грубо говоря WPF существует. Но там все до единого контролы "ненастоящие" - рисуются не winapi, а собственно библиотекой(direct 3d ... Угу, настолько ненастоящие, что размытые надписи на кнопках сразу бросаются в глаза. Видимо врожденный порок технологии. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2013, 10:28 |
|
|
start [/forum/topic.php?fid=20&msg=38399521&tid=1404021]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
58ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 324ms |
total: | 473ms |
0 / 0 |