2010-03-11 5 views
1

У меня есть дескриптор окна и его элемент управления richEdit. Смогу ли я заменить указанный элемент управления одним из своих? Я бы хотел, чтобы он вел себя как оригинальный, т. Е. Был бы частью окна и т. П.Замена управления окном другим во время выполнения

Далее я расскажу о сценарии - в настоящее время я разбираю приложение, одной из функций которого является текстовый редактор. Моя текущая (ограниченная) среда имеет в ней различные привязки к процедурам, одна из которых дает дескриптор окна редактора. Другой позволяет мне получить дескриптор RichEdit20A, который управляет хостами окон.

Что я хотел бы сделать это: перезапишите элемент управления с моим собственным (его эквивалент .NET предположительно) и исправьте вызовы GetWindowText приложения, чтобы использовать новый. Чтобы реализовать его, я планирую написать библиотеку классов в C#/управляемом C++ и импортировать его в свое приложение (которое написано на неуправляемом C++).

Также может быть произвольное количество экземпляров текстового редактора.

+0

Это невозможно, никому не позволяя приложению знать, что ему нужно использовать другой дескриптор окна. Или введите управляемый код в неуправляемую программу. –

+0

Мой текущий крючок позволяет мне изменять стек вызовов непосредственно перед вызовом GetWindowTextA (голая функция, оснащенная оберткой asm), и я не планирую вводить сам управляемый код. Понимаете, мое приложение действует как неуправляемая оболочка, которая исправляет приложение. Он ничего не делает, кроме вызовов методов библиотеки классов, чтобы установить/получить текст последнего. – shadeMe

ответ

0

Звучит слишком сложно. Просто замените его WndProc (GWL_WNDPROC), не перенаправляя ничего, а затем аннулируйте HWND. Это заставит перерисовать (WM_PAINT), который вы сможете захватить. Владелец, вероятно, даже не заметил бы (за исключением случаев, когда он тоже был зацепился)

Смежные вопросы