![]() |
|
|
![]()
|
|
| DukeCpp |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 27.2.2006 Где: St.Petersburg Репутация: 1 Всего: 1 |
Здравствуйте, уважаемые;
Можно ли стандартными средствами Visual C++ 2003 сохранить содержимое окна программы в wmf (предпочтительнее в gif) - файл (или на худой конец всё окно, как по Alt+PrintScreen) в несколько строк кода? Если данный вопрос уже поднимался -- дайте, пожалуйста, линк; Заранее благодарен |
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Элементарно.. Есть класс CFile для работы с файлами А вот ЧТО ты будешь сохранять(какие даные)-это твои проблемы. Для этого нужно знать ФОРМАТ данного расширения.. -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| DukeCpp |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 27.2.2006 Где: St.Petersburg Репутация: 1 Всего: 1 |
ну-с, всё элементарно, когда знаешь;
вот, например, я могу скопировать форму приложения в буфер обмена очень просто:
а далее есть
и вот этот pDataSource нужно нужно юзать в CFile::Write()? мб это и хорошо, но при наведении на эту функцию студия показывает хинт: HANDLE GetClipboardData( UINT uFormat /* clipboard format */); а при нажатии F1 на этой функции он выдаёт такой хелп:
И что здесь к чему? Помогите разобраться, что писать в Write, т.к. код
генерит ожидаемую ошибку Runtime при попытки закрытия файла. Каким мне задать этот uFormate. В хелпе не разобрался: Parameters uFormat Specifies a clipboard format. For a description of the clipboard formats. Это прекрасно, но _как_ его описать? И ещё простите за возможно слишком простой вопрос: как мне узнать, например, в каком файле находится описание COleDataSource. Что нужно подключить, чтобы его юзать. При нажатии F1 удобной строки с файлом, в котором описан тип, как в билдере, нет. (Метод "правой кнопкой на имени, GoToDeclaration, имхо преизварщенский) Это сообщение отредактировал(а) DukeCpp - 27.2.2006, 17:37 |
||||||||
|
|||||||||
| DukeCpp |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 27.2.2006 Где: St.Petersburg Репутация: 1 Всего: 1 |
При данном коде
возникает Dubug Assertion Failed при попытке закрытия файла. Я не знаю, почему; подскажите, где хоть копать.. Это сообщение отредактировал(а) DukeCpp - 27.2.2006, 19:33 |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
1) Clipboard сначала неплохо бы открыть (OpenClipboard). Потом, соответственно, закрыть.
2) То, что возвращает GetClipboardData, зависит от формата. В случае CF_BITMAP возвращается HBITMAP. Неплохо бы проверить, что это не 0. И кто вообще сказал, что PrintScreen записывает CF_BITMAP. Т.е. возможно, конечно, но проверить надо. 3) HBITMAP - это не указатель на память! И с чего ты взял, что картинка размером 200*200 пикселов занимает 40000 байтов? Сначала копать MSDN на предмет работы с Clipboard. Кстати, возможно, использование COleDataObject (MFC'шный объект для работы с Clipboard) окажется более удобным, чем голый API. Потом копать MSDN на предмет - как из HBITMAP вытащить нужную тебе информацию. Тут может помочь класс CImage - он умеет конструироваться из HBITMAP, а также записываться в файл. -------------------- ... |
|||
|
||||
| DukeCpp |
|
||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 27.2.2006 Где: St.Petersburg Репутация: 1 Всего: 1 |
с удовольствием, только вот студия (Watch List) говорит, что в данном коде:
в строке проверки h <undefined value> HBITMAP__* как это расценивать? а если без явного преобразования типа, так вообще не компиляет. И как проверить, что записывает PrintScreen?
А как его тогда расценивать, учитывая макросы, которым этот тип определяется? да, с размером ошибся, спасибо: 200*200*глубина_цвета (кстати, как color_depth узнатЬ?) попробовал ещё другой способ, который описан в хелпе к Clipboard, то он для графики не идёт:
однако тело условной конструкции он проускает.
с этим проблем возникнуть не должно -- осталось теперь вытащить объект из буфера. Это сообщение отредактировал(а) DukeCpp - 27.2.2006, 22:43 |
||||||||||
|
|||||||||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Студия может говорить что угодно, это ее личные тараканы. Ты должен понимать, что студия - это одна программа, а компилятор - совсем другая... Правильно, возвращается нечто неопределенное (HANDLE), что требуется явно преобразовать к нужному типу. Для WinAPI это нормально.
Пожалйста, только это тоже неправильно. Во-первых, есть заголовок, во-вторых - данные могут быть сжаты. Да и ничем тебе размер не поможет - еще раз повторяю - HBITMAP - не указатель. В форуме по WinAPI совсем недавно обсуждалась тема - что находится по адресу HBITMAP. Как узнать, в каком формате записывает PrintScreen - ну, во первых, проверить - а вдруг все-таки в CF_BITMAP (тогда GetClipboardData должна возвратать не 0). Еще есть функции EnumClipboardFormats, а также IsClipboardFormatAvailable. -------------------- ... |
|||
|
||||
| DukeCpp |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 27.2.2006 Где: St.Petersburg Репутация: 1 Всего: 1 |
Имея битмап, правомерно ведь такое действие
Но студия даже не создаёт файла на диске. мало того,
тоже не работает -- не создаётся файл; как это объяснить? Это сообщение отредактировал(а) DukeCpp - 6.3.2006, 01:21 |
||||
|
|||||
| DukeCpp |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 27.2.2006 Где: St.Petersburg Репутация: 1 Всего: 1 |
Всем спасибо за соучастие; вопрос разрешил и объявляю его закрытым.
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |