Здравствуйте, elGray, Вы писали:
G>Э... как это HDC не трогать? На входе "скриншот", полученный через GetDC. Что вы имеете в виду?
G>Я так понимаю, что нужно передавать BITMAPINFOHEADER ? Вроде накопал в МСДН, как их туда-обратно пребразовывать.
HDC — это такая виртуальная штука, позволяющая рисовать на различных устройствах используя единый упрощенный интерфейс. Передавать ее по сети смысла нет, поскольку это всего лишь хендл и на другом компе смысла иметь не будет.
Далее, я так понимаю вы получаете скриншот вот таким образом:
HDC hdc = GetDC(NULL);
Теперь вам нужно создать еще один контекст в памяти (CreateCompatibleDC) и битмап (CreateCompatibleBitmap). Выбрать этот битмап в ваш контекст. Скопировать все с контекста экрана (hdc) в ваш мемори контекст (BitBlt). Теперь создаете на основе вашего битмапа (он же DDB) девайсо независимый битмап (DIB, см. ф-цию GetDIBits) и его уже передаете по сокету. Про формат DIB придется немного почитать, он довольно сложен для того, чтобы здесь описывать.
Ну вот примерно так, возможны мелкие неточности.
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde