Официальный сайт студ.городка НГТУ
Программирование и БД » [Visual C++ MFC ] Print Screen 

#1  19.05.06 00:03

[Visual C++ MFC ] Print Screen

как средствами выше перечисленных инструментов сделать принт скрин и засунуть результат в битовый массив...

Offline

#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

#3  19.05.06 11:30

Re: [Visual C++ MFC ] Print Screen

попробуй эмулировать нажатие клавиши принтскрин, и дергай виндовый копипаст 8)

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

#9  19.05.06 13:21

Re: [Visual C++ MFC ] Print Screen

Я имел ввиду себя 8)

Offline

#10  19.05.06 13:22

Re: [Visual C++ MFC ] Print Screen

MadSlayer, если бы я тебя не знал, то я бы ещё подумал, что быстрее и правильнее, а так просто ржу из-под стола. ;))

Offline

#11  19.05.06 15:57

Re: [Visual C++ MFC ] Print Screen

otaku, если поджимают сроки и ни чего не охота читать, пиши на форум... я так и сделал ;)MadSlayer, спасибо друг )

Offline

#12  19.05.06 16:19

Re: [Visual C++ MFC ] Print Screen

Да незашто ))

2_pizza, Серега, а ты хоть понял про что тут пишут? )))

Offline

#13  09.06.06 13:04

Re: [Visual C++ MFC ] Print Screen

про. написал(а):

otaku, убей себя. с такими умениями тебя к компу подпускать не надо.

неее, чуваг. тут даже из мягкой комнатки низя выпускать. не говоря уж про компы.

Offline

Программирование и БД » [Visual C++ MFC ] Print Screen 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.113 сек.
Выполнено 14 запросов.