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