Я хочу отключить отображение элемента управления некоторым растровым изображением, чтобы у меня был быстрый доступ к нему.Invalidate in own bitmap
К сожалению, Control.DrawToBitmap
, похоже, нарисовал весь элемент управления, на который он вызывается, включая все его дочерние элементы управления. Внутри он выдает сообщение WM_PRINT с самообслуживанием DC в растровое изображение. Это временное растровое изображение затем распространяется на предоставленный пользователем битмап. Для меня неприемлемым, я бы предпочел, чтобы это растровое изображение было обновлено по мере необходимости, чтобы моя производительность удалась, когда битмап нужен, минимизирован.
В идеальном сценарии я бы хотел, чтобы форма вела себя так, как если бы она была видна на экране (но этого не может быть). Это означало бы, что если, скажем, какой-то элемент управления имеет свойство Text
, форма будет частично аннулирована. Поймав соответствующие сообщения/события, я позволю себе либо указать свой собственный DC для формы, на которую нужно нарисовать, либо просто BitBlt формы DC для моих собственных.
Некоторые направления я заглянула в:
- Параметр
PaintEventArgs
вOnPaint
кажется держать savedGraphicsState члена, возможно, он может быть использован, чтобы выяснить, что не требует недействительности - Имея форму видимой но вне области экрана. Однако элементы управления не окрашиваются.
- вручную вызова RedrawWindow() в окне, та же история
Я не совсем понимаю, почему 'DrawToBitmap' (сообщение' WM_PRINT') неприемлемо для вашего использования. Вы беспокоитесь о производительности *? Очень маловероятно, что рисование в растровое изображение будет медленнее, чем рисование на экране. –
Мне нужен механизм буферизации. DrawToBitmap красит весь элемент управления с нуля, в то время как система недействительности, используемая в обычных окнах, обновит только те области, которые фактически изменились. –
@Frank, вы считали использовать Bitblt? http://www.codeproject.com/KB/GDI-plus/Bitblt_wrapper_class.aspx –