Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2011, 00:40   #1
Anubys
Форумчанин
 
Регистрация: 08.05.2010
Сообщений: 177
По умолчанию Как выгрузить нарисовано на экране в графический файл

Здесь у меня такая ситуация.
Мне нужно нарисовать что нибуть в программе и содержимое окна выгрузить в графический файл (emf)
Код:
//------------контекст метафайлу----------------
void MetaFile(HWND hWnd)
{
//------спочатку використаємо стандартне вікно SaveAs----- 
//------для визначення повного імені файлу (szFname)------
OPENFILENAME ofn;
char szFname[256];
szFname[0] = 0;
memset(&ofn, 0, sizeof (OPENFILENAME));
ofn.lStructSize  = sizeof (OPENFILENAME);
ofn.hwndOwner    = hWnd;
ofn.lpstrFilter  = "Метафайли   (*.emf)\0*.emf\0\0",
ofn.lpstrDefExt  = "emf";
ofn.lpstrFile    = szFname;
ofn.nMaxFile     = 256;
if (!GetSaveFileName(&ofn)) return;
//--------------тепер створення метафайлу------------------ 
HDC hdc,hdcWin;
HENHMETAFILE hemf;
hdc = CreateEnhMetaFile(NULL, szFname ,NULL,NULL);
if (hdc == NULL) return;  //помилка, контекст не створений 
for (int i=0; i<10; i++)
    Rectangle(hdc, i*30, i*20, i*30+70, i*20+50);       
hemf = CloseEnhMetaFile(hdc);  //запис на диск і закриття
//--демонстрація можливостей відображення метафайлу у вікні 
RECT rc;
hdcWin = GetDC(hWnd);             //беремо контекст вікна
for ( i=0;i<4;i++)      //16 разів відобразимо метафайл
    for (int j=0;j<4;j++)  //у комірках 45x45 пікселів
        {
        rc.left   = 50*i;    //поточні межі відображення
        rc.top    = 50*j;
        rc.right  = 45 + rc.left;	
        rc.bottom = 45 + rc.top;	 
        PlayEnhMetaFile(hdcWin,hemf, &rc);
        }
//------- ще одне відображення метафайла (хрестиком)-------
rc.left   = 210;
rc.top    = 20;
rc.right  = 380;
rc.bottom = 180;
PlayEnhMetaFile(hdcWin,hemf, &rc);
rc.top    = 180;      //а тут дзеркальний виверт 
rc.bottom = 20;
PlayEnhMetaFile(hdcWin,hemf, &rc);
ReleaseDC(hWnd,hdcWin);        //звільняємо контекст вікна
DeleteEnhMetaFile(hemf);       //звільняємо пам'ять,
}                              //файл на диску залишається
Подскажите пожалуйста
Anubys вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как выгрузить сайт в интернет steck Свободное общение 18 22.02.2011 13:47
Как выгрузить строку таблицы в отдельную книгу? NVNPP Microsoft Office Excel 1 21.04.2010 09:08
как правильно выгрузить dll из памяти пауэрлифтинг Общие вопросы Delphi 11 05.04.2010 00:46
Сохранить графический файл NSvirus Паскаль, Turbo Pascal, PascalABC.NET 1 05.05.2009 04:11
как выгрузить базу данных из MySQL в Access??? TRANE Помощь студентам 5 03.12.2007 13:22