Замена управления окном другим во время выполнения
Вопрос
У меня есть ручка с окном и его контроль Richedit. Смогу ли я заменить указанный контроль одним из моих собственных? Я бы хотел, чтобы это было вести себя как оригинальный, т.е. был бы частью окна и таким же.
Я подробно расскажу об этом сценарии - в настоящее время я разбираю приложение, одно из которых является текстовым редактором. Моя текущая (ограниченная) среда имеет в ней различные крючки для процедур, один из которых дает ручку в окно редактора. Другой позволяет мне приобретать ручку на RichedIt20a управляет хостами окна.
Я хотел бы сделать это - перезаписать управление своим собственным (предположительно .NET, предположительно) и исправить приложения GetWindowText, чтобы использовать новое. Чтобы реализовать его, я планирую написать библиотеку классов в C#/Managed C ++ и импортировать ее в мое приложение (которое написано в неуправляемом C ++).
Кроме того, может быть произвольное количество экземпляров текстового редактора.
Решение
Это звучит слишком сложно. Просто замените его wndproc (GWL_WNDPROC
), ничего не пересылаю, а затем аннулировать HWND. Это заставит перерисовать (WM_PAINT
), который вы можете затем запечатлеть. Владелец, вероятно, даже не заметил бы (если бы он тоже не зацепил), конечно)