#2 19.05.06 11:06
Re: [Visual C++ MFC ] Print Screen
Если всего рабочего стола, то ::GetDc(NULL), а если текущего окна, то GetDc() у твоего окна. Это получить контекст. А из контекста выдернуть нет проблемм, или объяснить?
Вобщем на WinAPI, которое можно пользовать и так, а при желании элементарно заменить на классы MFC или ATL:
получили HDC, например HDC dc = GetDc(NULL);
а дальше:
HDC hMemDC; // виртуальный контекст
hMemDC = CreateCompatibleDC(dc); //создаем виртуальный контекст
HBITMAP hBitmap = CreateCompatibleBitmap(dc, width, height); //width, height - размеры твоего скриншота
SelectObject(hMemDC, hBitmap); //выбираем битмап - теперь все что там рисуется на hMemDC, будет отоброжаться на hBitmap.
BitBlt(hMemDC, 0, 0, width, height, dc, 0, 0, SRCCOPY); //копируем содержимое dc в hMemDC.
//возвращаем ресурсы
DeleteDC(hMemDC);
ReleaseDC(dc);
Все в hBitmap - дескриптор битмапа со скриншотом, теперь в битовый массив его можно выдернуть например функцией GetDIBits. Например так.
BYTE *image = new[width * height * 3];
BITMAPINFO pbi;
pbi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
pbi.bmiHeader.biWidth = width;
pbi.bmiHeader.biHeight = height;
lpbi.bmiHeader.biBitCount = 24;
lpbi.bmiHeader.biCompression = BI_RGB;
GetDIBits(hMemDC, hBitmap , 0, height, image, &pbi, DIB_RGB_COLORS); //только перед удаление hMemDC ))
Вобщем для вопросов читай MSDN - там все четко расписанно ))
Offline
#4 19.05.06 12:00
Re: [Visual C++ MFC ] Print Screen
otaku написал(а):
попробуй эмулировать нажатие клавиши принтскрин, и дергай виндовый копипаст 8)
Прикалываешся? Это то что называется делать через задницу, а не прямо )) У Win GDI, есть быстрые и доступные средства для таких вещей, которые я и привел выше, посредством которых кстати тот же самый PrintScreen и реализован ))
Offline
#5 19.05.06 12:07
Re: [Visual C++ MFC ] Print Screen
MadSlayer написал(а):
Прикалываешся? Это то что называется делать через задницу, а не прямо )) У Win GDI, есть быстрые и доступные средства для таких вещей, которые я и привел выше, посредством которых кстати тот же самый PrintScreen и реализован ))
но по мойму написать эмуляцию нажатия клавишы, и копирование из виндового буфера быстрее чем делать что то через GDI, быстродействие может быть и пострадает, тут надо выбирать между быстротой реализации и быстродействием конечной реализации
Offline
#6 19.05.06 12:16
Re: [Visual C++ MFC ] Print Screen
GetDc();
CreateCompatibleDC();
CreateCompatibleBitmap();
SelectObject();
BitBlt();
Все )
Вызов пяти функций ) Это сложнее написать чем эмуляцию preentscren и копирование из буфера? не смеши меня )) не говоря о том что решение должно быть общим, а не полумерами, за которые я бы убивал затеявших их девелоперов ))
Offline
#7 19.05.06 12:31
Re: [Visual C++ MFC ] Print Screen
MadSlayer написал(а):
Все )
Вызов пяти функций ) Это сложнее написать чем эмуляцию preentscren и копирование из буфера? не смеши меня )) не говоря о том что решение должно быть общим, а не полумерами, за которые я бы убивал затеявших их девелоперов ))
ну если ты знаешь как правильно написать то быстрее, а если нет и на тебя давят, итпо давай давай уже результат, то можно пойти и обходным путем 8)
Offline
#8 19.05.06 13:12
Re: [Visual C++ MFC ] Print Screen
otaku написал(а):
ну если ты знаешь как правильно написать то быстрее, а если нет и на тебя давят, итпо давай давай уже результат, то можно пойти и обходным путем 8)
Ладно забили, есть только несостыковочка. Во первых человек пишет на MFC, а такие люди обычно знают, что такое битмап, DC, BitBlt и прочее, ибо это одни из основ постороения виндового интерфейса ) И если ты виндовый интерфейс строишь - то знать это должен. Во вторых, если тебя кто то давит, значт уверен в твоей компетентности, значит считают что ты знаешь то, над чем работаешь. И ктому же что за девелопер, который за 10 минут максимум не сможет разобраться в этом деле в том же MSDN-е? ))
Ну это так лирическое отступление )
Offline

