|
А где правильно снимать сабклассинг, делать всякие Destroy и т.п.
|
|||
---|---|---|---|
#18+
AntonariyСабклассинг нужно снимать всегда. Ну допустим с опытом про такие вещи как Код: vbnet 1. 2. 3. 4. 5. 6. 7.
(список примеров можно продолжать) стараешься не забывать и таки делать. Понятно, что если что-то "больше не нужно", то как только так сразу и чем скорее тем лучше. В большинстве случаев сабклассинг, иконки, ImageList-ы, тулбары и прочее существует и нужно на протяжении всего периода жизни формы. В нек. примерах все "уничтожается" в Form_Unload, в других в Form_QueryUnload. Как (где) все-таки правильно? В Unload? Или в _QueryUnload? И что делать сначала? Что потом? SaveSettings или Destroy_ALL Думаю SaveSettings. Например сохранял параметр "Показывать/не показывать Rebar" проверяя IsWindowVisible(g_hwndRebar) и сдуру перед этим ляпнул DestroyWindow g_hwndRebar накололся, ибо после Destroy IsWindowVisible=false без вариантов. Можно ли снимать сабклассинг до SaveSettings? Понятно, что наверно можно по-разному, но хотелось бы выработать хоть какие-то правила. Чтоб в разных частных случаях не выдумывать иногда часами частные "затычки". ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2013, 02:19 |
|
А где правильно снимать сабклассинг, делать всякие Destroy и т.п.
|
|||
---|---|---|---|
#18+
Дмитрий77Как (где) все-таки правильно? В Unload? Или в _QueryUnload?Если в QueryUnload не собираешься отменять закрытие, то пофиг. Дмитрий77Можно ли снимать сабклассинг до SaveSettings?Почему нет? Просто нужно помнить, зависят ли сохраняемые параметры от сабклассинга. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2013, 03:02 |
|
А где правильно снимать сабклассинг, делать всякие Destroy и т.п.
|
|||
---|---|---|---|
#18+
Antonariy, А если я использую, как бы это сказать, несколько сабклассингов одного и того же hwnd (часто так делаю): Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
То как мне их снимать? Если Код: vbnet 1. 2. 3.
Что-то тут не так... Ну допустим, Menu и Rebar я еще могу совместить, а вот FormMe никак не воткнешь - нужна отдельная ф-ция. Код: vbnet 1. 2.
Или любая строчка из трех вышеприведенных снимет все 3 сабклассинга? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2013, 09:16 |
|
А где правильно снимать сабклассинг, делать всякие Destroy и т.п.
|
|||
---|---|---|---|
#18+
Дмитрий77А если я использую, как бы это сказать, несколько сабклассингов одного и того же hwnd (часто так делаю):Зачем? Можно же объединить процедуры в одну, если они не в разных библиотеках. А если в разных, то и вопрос такой не стоит, у каждой библиотеки единственный указатель. Я делал наоборот, использовал одну процедуру для сабклассинга разных окон. Дмитрий77То как мне их снимать?Нужно восстановить оригинальную процедуру, то есть первый полученный указатель: OldMenuWindowProc. На всякий случай: 1) OldReBarWindowProc = AddressOf NewMenuWindowProc, OldFormMeWindowProc = AddressOf NewReBarWindowProc 2) Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2013, 10:43 |
|
А где правильно снимать сабклассинг, делать всякие Destroy и т.п.
|
|||
---|---|---|---|
#18+
Ошибка копипаста Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2013, 10:47 |
|
А где правильно снимать сабклассинг, делать всякие Destroy и т.п.
|
|||
---|---|---|---|
#18+
Дмитрий77Ну допустим, Menu и Rebar я еще могу совместить, а вот FormMe никак не воткнешь - нужна отдельная ф-ция.Если это из-за lParam As WINDOWPOS, то это не проблема. Делай ByVal lParam As Long, а записать в него значение, если нужно, можно с помощью CopyMemory. А уж прочитать тем более. lParam это же адрес блока памяти, выделенный под переменную типа WINDOWPOS, и размер этого блока известен. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2013, 10:52 |
|
А где правильно снимать сабклассинг, делать всякие Destroy и т.п.
|
|||
---|---|---|---|
#18+
Чет у меня мозги плохо варят с "вложенными" сабклассингами. AntonariyЕсли это из-за lParam As WINDOWPOS, то это не проблема.. Да в общем то нет. Скорее привычка лепить новый сабклассинг на тот же hwnd не задумываясь. AntonariyДелай ByVal lParam As Long, а записать в него значение, если нужно, можно с помощью CopyMemory. А уж прочитать тем более. lParam это же адрес блока памяти, выделенный под переменную типа WINDOWPOS, и размер этого блока известен. Ну в данном конкретном случае я воспользовался этим советом и совместил меню, тулбар и ограничение размеров формы 3 в 1. Код: 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.
Посмотрим с чем столкнусь. Счас просто делаю новый "красивый" exe-шник с нуля, но по шаблону старого. Ну и стараюсь устранять ляпы, типа отсутствия того о чем писал в начале. Как бы по науке, а не на авось. Но думаю если будет чего-то совсем сложное-причесываемое трудно-понимаемое, просто забью на снятие сабклассинга в пользу наглядности и экономии времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2013, 02:07 |
|
А где правильно снимать сабклассинг, делать всякие Destroy и т.п.
|
|||
---|---|---|---|
#18+
Я вот понять не могу. У меня два сабклассинга. Первый стандартный. Код: vbnet 1. 2. 3.
Ловит WM_COPYDATA, теперь WM_WINDOWPOSCHANGING и прочую рутину Второй покруче -занимается проигрыванием файлов: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Совмещать абсолютно неудобно, т.к. вторая ф-ция находится в своем - "звуковом" модуле. Ну, дай думаю заменю FormMain.hwnd на какую-нибудь FormMain. Picture_CALLBACK .hwnd Какая этому PlayWav разница, куда Msg-ы слать, в картинку или в форму. И нифига не работает!!! Приложение считай виснет после первого Callback-а. Ну, цель-то была просто чтоб сабклассинги снять поотдельности. В чем проблема? Что-то где-то недоглядел? Или waveOutOpen требует форму для этой цели? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2013, 04:42 |
|
А где правильно снимать сабклассинг, делать всякие Destroy и т.п.
|
|||
---|---|---|---|
#18+
Дмитрий77В чем проблема? Что-то где-то недоглядел? О, теперь доглядел: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
В одном месте подправил, в другом проглядел. Этот вопрос снят. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2013, 05:09 |
|
|
start [/forum/topic.php?fid=60&fpage=58&tid=2156993]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
24ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
2ms |
others: | 270ms |
total: | 376ms |
0 / 0 |