Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> получить "сномок" окна по handle'y, есть handle окна надо получить его изобр 
:(
    Опции темы
ano360
Дата 29.1.2009, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 22.5.2006
Где: Москва

Репутация: нет
Всего: нет



есть handle окна. пытаюсь получить его изображение:
(С++ Builder)
DefWindowProc(hWnd, WM_PRINT,(WPARAM)Form1->Image1->Canvas->Handle,NULL); 
на что Image1 заливается белым

   SendMessage(hWnd, WM_PRINT,(WPARAM)Form1->Image1->Canvas->Handle,NULL); 

hWnd не битый, проверено . пробую для разных окон, при любом hWnd одно и то же

может необходимо настроить буфер-приемник?


--------------------
Жизнь есть.
PM MAIL WWW ICQ   Вверх
GremlinProg
Дата 29.1.2009, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Код

SendMessage(hWnd, WM_PRINT,(WPARAM)Form1->Image1->Canvas->Handle,PRF_CLIENT | PRF_NONCLIENT); 


Это сообщение отредактировал(а) GremlinProg - 29.1.2009, 23:11


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
ano360
Дата 30.1.2009, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 22.5.2006
Где: Москва

Репутация: нет
Всего: нет



тот же эффект....


--------------------
Жизнь есть.
PM MAIL WWW ICQ   Вверх
Katko
Дата 22.3.2009, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 11.9.2007

Репутация: нет
Всего: нет



Делаешь нужное окно активным и имитируешь нажатие Alt+PrtScr:
Код

    keybd_event(VK_SNAPSHOT, 1, 0 ,0);
    keybd_event(VK_SNAPSHOT, 1,  KEYEVENTF_KEYUP,0);


У мну срабатывает на ура.
PM MAIL   Вверх
GremlinProg
Дата 22.3.2009, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



принтскрин делает то же самое, да и по крайней мере на WM_PRINT, граница окна с кэпшеном должна была бы прорисоваться,
раз все белое, значит идет какаято пост-обработка на канве, которая все это стирает
пробуй напрямую создать девайс, назначить ему битмап и послать WM_PRINT
либо на крайний случай, получить координаты окна и скопировать его с нулевого девайса (GetDC(0))


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
BEOWOLF
Дата 23.3.2009, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 24.8.2007

Репутация: 1
Всего: 2



Вот собственно пример, как надо делать принтскрин под GDI:
Код

static HBITMAP CALLBACK ShootDesktop(const RECT& rect)
{
    HDC hdcScreen = CreateDC(TEXT("DISPLAY"), 0, 0, 0); // make virtual screen device context
    HDC hdcCompatible = CreateCompatibleDC(hdcScreen); // make memory device context
    HBITMAP hbmScreen = CreateCompatibleBitmap(hdcScreen, rect.Width(), rect.Height());
    hbmScreen = (HBITMAP)SelectObject(hdcCompatible, hbmScreen); // push bitmap to memory HDC
    BitBlt(hdcCompatible, 0, 0, rect.Width(), rect.Height(), hdcScreen, rect.left, rect.top, SRCCOPY);
    hbmScreen = (HBITMAP)SelectObject(hdcCompatible, hbmScreen); // rotate back bitmap
    DeleteDC(hdcCompatible);
    DeleteDC(hdcScreen);

    return hbmScreen;
}
Здесь можно и без хэндла окна обойтись, только имея его координаты в rect. Потому что hdcScreen всё равно получать придётся, либо с десктопа, либо через GetWindowDC. Далее с получиным хэндлом можно проводить разные манипуляции - либо рисовать матрицу в другие девайсы, либо построить из него Gdiplus::Bitmap, который можно сохранить в файл в нужном графическом формате. Либо сформировать поток и передать инфу по сети.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0737 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.