скорее это вы не занимались. что сложного найти в куче своего же дока отдельный участок. попробуйте как нибудь я не знаю MessageBox вывести и найти использование в коде той самой уникальной строки из него. ну или просто эту строку расположите в непосредственной близости к своему коду. методов много, но вы видать не один не знаете, а единственный отладчик который видели тот что прилагается к студии. тогда понятно почему вы не знаете как в куче кода найти нужный участок, тем более если его сами и пишите. а вот с Clerk'ом я согласен. надо просто выбирать метод достаточно гибкий для конкретного случая, а не ограничивать себя "злыми рамками" ( ). я тоже могу сказать. винда зло. пишите под чистое железо и только на асме!!!
свой кусок кода? в том-то и дело, что когда работаешь один - примерно ориентируешься во всём коде. да даже и это не означает что для себя самого можно лепить всё что попало - через год возьмёшь сорцы, заблудишься. я уж молчу про командные проекты. угу. наставишь там мессагбоксов ))))))))))
maksim_ жесть какая-то, с такими ограничениями нормальное что-то никто не пишет куски ... какие-то может быть, типа окошечек
maksim_ ...Тем временем: ультимативный способ, на который сделал намёк Velheart – динамическая генерация wndproc-министабов, лайк: Код (Text): mov ecx, ObjectPtr jmp MyClass_WndProc Т.е. необходимость сгенерировать этот стаб во время выполнения и использовать его в качестве оконной процедуры.
Это называется преждевременная оптимизация. Если хорошо подумать (а лучше померить) - то сколько раз вызывается процедура окна - ну скажем в одну секунду? GetWindowLong/SetWindowLong вполне подходит по скорости. Даже если есть, скажем 25 окон в одной программе. Надо оптимизировать например код выполняемый по WM_MOUSEMOVE. Это будет полезно.
то есть что-то типа, Код (Text): char p_handler[] = "\xB9\x00\x00\x00\x00\xE9\x00\x00\x00\x00"; ... // constructor *(CAny**)(p + 1) = this; *(WNDPROC*)(p+6) = this->on_window_message; ... Ну, вообще говоря, вариант. только опять-же секция в которой будет p_handler должна обладать PAGE_EXECUTE_READWRITE. то есть, если всё правильно делать, нужно сначала VirtualProtect с PAGE_READWRITE, затем с PAGE_EXECUTE_READ.