Я хочу вне экрана перерисовать элемент управления в некоторую битовую карту, чтобы иметь к нему быстрый доступ.
К сожалению, Control.DrawToBitmap
, похоже, рисует весь элемент управления, на котором он вызван, включая все его дочерние элементы управления. Внутри он выдает сообщение WM_PRINT с самоподготовленным DC на битовую карту. Затем этот временный битмап перерисовывается на битмап, предоставленный пользователем. Для меня это неприемлемо, я бы предпочел, чтобы этот битмап обновлялся по мере необходимости, чтобы снижение производительности, когда битмап необходим, было минимальным.
В идеальном сценарии я бы хотел, чтобы форма вела себя так, как если бы она была видна на экране (но это не так). Это будет означать, что если, скажем, у какого-нибудь Control'а изменится свойство Text
, то форма будет частично недействительна. Перехват соответствующих сообщений/событий позволит мне либо указать свой собственный DC для формы, на котором она будет рисоваться, либо просто BitBlt DC формы на свой собственный.
Некоторые направления, в которых я искал:
PaintEventArgs
в OnPaint
, кажется, содержит член savedGraphicsState, возможно, его можно использовать, чтобы выяснить, что не требует аннулирования