Рисование над TextBox в .NET Compact Framework - PullRequest
0 голосов
/ 08 февраля 2009

Можно ли нарисовать элемент управления TextBox в .NET Compact Framework? Я хочу создать водяной знак поверх него. Я прочитал этот ответ . В настоящее время это мой лучший подход, но я не хочу ограничивать себя отображением водяного знака только тогда, когда TextBox не имеет фокуса.

Я готов попробовать любой взлом!

Ответы [ 2 ]

1 голос
/ 08 февраля 2009

Если бы я сделал это, я бы создал элемент управления, который наследуется от TextBox, таким образом вы получаете все базовый рендеринг, события, текст и выделение, yada-yada. Затем я бы использовал P / Invoke для SetWindowLong, чтобы изменить обработчик окна и обработать WM_PAINT в пользовательском обработчике, рисуя водяной знак или что угодно.

Хорошим базовым примером является класс OpenNETCF.Windows.Forms.TextBox2 , который выполняет этот подкласс для обработки операций вырезания / копирования / вставки. Я полагаю, что код существует с 1.x дней, поэтому код доступен бесплатно (внизу страницы в ссылке выше), если у вас нет / хотите получить последнюю версию.

0 голосов
/ 08 февраля 2009

К сожалению, .NET CF TextBox не может быть унаследован и использован в качестве основы для этой задачи (для начала OnPaint не вызывается), поэтому, честно говоря, я думаю, что вы сэкономите немного времени, создав собственный элемент управления.

Просто, чтобы получить представление о создании пользовательских элементов управления в .NET CF, если вы этого еще не сделали, я настоятельно рекомендую после этой публикации в блоге сделать элементы управления прозрачными, поскольку концепция в основном такая же:

http://christian -helle.blogspot.com / 2008/01 / прозрачно-управления-в-netcf.html

Если бы я делал это с нуля, я бы начал с наследования от Panel и превратил его в текстовое поле. Текстовое поле, вероятно, является одним из самых сложных элементов управления (особенно если текст может быть длиннее, чем текстовое поле), поэтому вы также можете посмотреть, есть ли у других поставщиков компонент TextBox с исходным кодом, с которого вы могли бы начать, таким образом, вы могли бы просто добавьте .DrawImage в конец метода рисования, и вы получите водяной знак.

...