|
А как сделать SendMessage, если lParam - структура?
|
|||
---|---|---|---|
#18+
Пример VB6: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Пытаюсь (NET), естественно с Marshal пробую проделав уже какой-то поиск в инете: Код: 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.
Выдает указывая на structPtr в SendMessage: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена. Чнго делать в таких случаях? Без API никак -нужен Rebar/Coolbar с поддеркой тем (Communication, Media итд.), а не порноStrip. Максимум на что рассчитываю, вставить в API ребар Net-Toolbar (он Common Controls) или даже Strip(но надо смотреть) -по идее это должно прокатить. Но интересует общий принцип передачи структуры в последнем параметре SendMessage -без этого жизнь не наладится. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2013, 18:36 |
|
А как сделать SendMessage, если lParam - структура?
|
|||
---|---|---|---|
#18+
Дмитрий77 Код: vbnet 1. 2. 3. 4. 5.
Выдает указывая на structPtr в SendMessage: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена. Короче "сам дурак". Забыл сделать Long->Integer. Все заработало. Либо так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
Либо так: Код: vbnet 1. 2. 3. 4. 5.
Сюда вопрос: Я вставляю [.NET]Toolbar1 в банд: Код: vbnet 1. 2.
-все вставляется. Я хочу попробовать то же самое с [.NET]ToolStrip Все-таки у стрипа больше штатных возможностей и стили он ПСЕВДО -поддерживает (хотя они и "рисованные" а не Common Controls, но "похоже"). Я попытался сделать: Код: vbnet 1.
ToolStrip1 с формы исчез, а в банде(в ребар) не появился. Решаемо? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2013, 19:38 |
|
А как сделать SendMessage, если lParam - структура?
|
|||
---|---|---|---|
#18+
Дмитрий77Но интересует общий принцип передачи структуры в последнем параметре SendMessage -без этого жизнь не наладится. Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2013, 01:32 |
|
А как сделать SendMessage, если lParam - структура?
|
|||
---|---|---|---|
#18+
в первой строке параметр добавить - GCHandle.Alloc(o, GCHandleType.Pinned); ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2013, 01:50 |
|
А как сделать SendMessage, если lParam - структура?
|
|||
---|---|---|---|
#18+
Вот нахрена это все тебе, 100% что в NET все что надо тебе есть и без SendMessage ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2013, 11:09 |
|
А как сделать SendMessage, если lParam - структура?
|
|||
---|---|---|---|
#18+
Изопропил Код: c# 1. 2. 3. 4.
...в первой строке параметр добавить Вот так работает (то же на VB.NET): Код: vbnet 1. 2. 3. 4.
Но коль предложили этот вариант, то вопрос. Чем он лучше Marshal-а? Дмитрий77Либо так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
На первый взгляд оба кода имеют один и тот же смысл. На Marshal в поиске натыкаешься чаще (вроде как). fortibransaВот нахрена это все тебе, 100% что в NET все что надо тебе есть и без SendMessage fortibransa, нет проблем. Мне надо: Код: vbnet 1.
Код: vbnet 1.
(смотри картинку ниже чего делают эти 2 строчки) И я это не сегодня придумал: Градиенты в Vista стиле, и в частности подложка под Toolbar. Дык вот, раз 100% в .Net все есть, объясни мне тупому как к Net.ToolStrip применить данный стиль (средствами .NET). Заметь, я не разрисовываю контрол Net-фломастерами, я применяю стиль. Сразу могу сказать следующее: Если брать .Net. Toolbar (который по умолчанию "задвинут"), то стиль таким образом к нему применяется . (но это только кнопки с белым шрифтом, а не синяя подложка) Если брать .Net. Toolstrip то стиль к нему НЕ применяется . Синяя подложка - это Rebar (Coolbar). В .NET ребар отсутствует, а ToolStrip данному стандарту не удовлетворяет (хотя как я написал выше его м.б. можно вставить в ребар (API-шный, других вариантов не вижу), но при этом задавать белый шрифт кнопок вручную - и м.б. "прокатит") ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2013, 00:48 |
|
А как сделать SendMessage, если lParam - структура?
|
|||
---|---|---|---|
#18+
Дмитрий77Но коль предложили этот вариант, то вопрос. Чем он лучше Marshal-а? Позволяет фиксировать структуру в памяти после вызова P/Invoke( API может требовать буфера, живущего между вызовами) Ну и просто получать адрес структуры для последующей передачи в произвольные API Обрати внимание ещё на пару методов - ToIntPtr , FromIntPtr и свойство Target http://msdn.microsoft.com/en-us/library/vstudio/system.runtime.interopservices.gchandle.target(v=vs.100).aspx P.S. А на кой эти танцы с бубном, не проще ли просто на C++ писать? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2013, 01:36 |
|
А как сделать SendMessage, если lParam - структура?
|
|||
---|---|---|---|
#18+
ИзопропилДмитрий77Но коль предложили этот вариант, то вопрос. Чем он лучше Marshal-а? Позволяет фиксировать структуру в памяти после вызова P/Invoke( API может требовать буфера, живущего между вызовами) Ну и просто получать адрес структуры для последующей передачи в произвольные API? Звучит убедительно. На данном этапе мне проще просто принять твой вариант "на веру". ИзопропилP.S. А на кой эти танцы с бубном, не проще ли просто на C++ писать? Мне не проще. Кроме хитрых штук которые решаются через API (для чего C++ согласен оптимален), есть еще куча просто кнопок, текстовых полей, что лучше и проще рисовать в конструкторе и использовать готовые контролы с готовыми событиями и т.д. Я не готов например все кнопки делать через CreateWindow. VB здесь удобнее (вы можете возразить), но веский аргумент, что я к VB6 привык. В VB6 бросаешь на форму готовый шаблон (пусть с ограниченными возможностями но он родной Win32 Common Control), пользуешься штатными возможностями при необх. допиливаешь через API. В .Net с одной стороны штатных возможностей больше (на что ставки - это экономия ресурсов). С другой стороны подвох. Половина контролов "не настоящие", я этого не люблю. Напр., Net.Toolbar -настоящий Common Control Net. ToolStrip -не настоящий, хотя при соотв. настройках и "косит под систему". MainMenu -настоящее меню. MenuStrip -рисовка, и на >=Виста выглядит существенно хуже штатных менюшек. Надо щупать короче. Просто VB6 морально устарел - очень многие стандартные вещи приходится делать через API и ручками -те же InitCommonControls, 32-битные иконки, манифесты. Потом C++ -очень много споров про всякие str типы-ф-ции -какая-то фигня может в ветке форума обсуждаться взахлеб неделю. Я не люблю кучу умных фраз, хочется все-таки побыстрее практически и визуально ощутимого результата. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2013, 05:00 |
|
А как сделать SendMessage, если lParam - структура?
|
|||
---|---|---|---|
#18+
Изопропил, А вообще я тут подумал. Остановлюсь ка я на технологии: Код: vbnet 1. 2.
Раз уж As Any недоступна, то проще несколько раз объявить API чем мудохаться с Marshal, GCHandle и писать кучу заумного кода. По крайней мере с ByRef структура работать яснее и прозрачней. И потом, в приведенном примере структура передавалась в ф-цию, а в ряде случаев структура содержит результат. Ниже пример в котором "Заумный код" в лоб не сработал (очевидно нужен другой прием чтоб записать в структуру): Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Подумаешь, 2 раза объявил SendMessage, зато все просто, ясно, прозрачно и работоспособно. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2013, 22:22 |
|
|
start [/forum/topic.php?fid=20&msg=38396902&tid=1404028]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 320ms |
total: | 471ms |
0 / 0 |