Рисование данных из контекста устройства - PullRequest
0 голосов
/ 27 декабря 2011

Я только что получил новый контекст устройства (DC):

GetDC(someForeignHwnd)

Большинство нормальных людей теперь хотят рисовать на этом. Я не. Я хочу отобразить контекст в моей собственной программе. Или дубликат, я бы даже не возражал против окна, в котором я украл контекст, чтобы быть пустым.

В моем случае я хочу это в TPanel в Delphi , но все, что помогает мне понять, уходит.

После этого я, вероятно, обнаружу, что DC недействителен к тому времени, когда у меня появится его отображение.

Моя главная проблема: показывать содержимое другого окна самостоятельно. Но это не важно. Прежде всего, я хочу знать, как эти DC полезны. Могу ли я сделать что-то вроде следующего?

Canvas.Draw(0, 0, MyNewDC);

Ответ может быть в Java , C или Pascal . Это просто невозможно или просто глупая идея?

1 Ответ

1 голос
/ 27 декабря 2011

Хотя можно использовать контекст устройства, который вы получаете через GetDC(), в качестве ИСТОЧНИКА для BitBlt() и т. Д., Вы, скорее всего, не получите результаты, которые вы ищете.Когда вы вызываете GetDC() для определенного окна, Windows, по существу, возвращает контекст устройства для экрана, но с областью отсечения, установленной для исключения любых частей экрана, где окно не видно.Например, если случается, что другое окно перекрывает исходное окно, часть исходного окна, которая покрыта, вырезается из контекста устройства.Следовательно, вы можете «извлечь» только те биты, которые действительно видимы.

Возможно, вам повезет больше, отправив в окно сообщение WM_PRINT или WM_PRINTCLIENT.Однако не все окна отвечают на эти сообщения, поэтому это не универсальное решение.

...