|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Creating an Enhanced Metafile
This section contains an example that demonstrates the creation of an enhanced metafile that is stored on a disk, using a filename specified by the user.
The example uses a DC for the application window as the reference DC. (Windows stores the resolution data for this device in the enhanced-metafile's header.) The application retrieves a handle identifying this DC by calling the GetDC function. The example uses the dimensions of the application's client area to define the dimensions of the picture frame. Using the rectangle dimensions returned by the GetClientRect function, the application converts the device units to .01-millimeter units and passes the converted values to the CreateEnhMetaFile function.
The example displays a Save As common dialog box that enables the user to specify the filename of the new enhanced metafile. The system appends the three-character .EMF extension to this filename and passes the name to the CreateEnhMetaFile function. The example also embeds a text description of the picture in the enhanced-metafile header. This description is specified as a resource in the string table of the application's resource file. However, in a working application, this string would be retrieved from a custom control in a common dialog box or from a separate dialog box displayed solely for this purpose.
/* Obtain a handle to a reference DC. */ hdcRef = GetDC(hWnd); /* * Determine the picture frame dimensions. * iWidthMM is the display width in millimeters. * iHeightMM is the display height in millimeters. * iWidthPels is the display width in pixels. * iHeightPels is the display height in pixels */ iWidthMM = GetDeviceCaps(hdcRef, HORZSIZE); iHeightMM = GetDeviceCaps(hdcRef, VERTSIZE); iWidthPels = GetDeviceCaps(hdcRef, HORZRES); iHeightPels = GetDeviceCaps(hdcRef, VERTRES);
/* * Retrieve the coordinates of the client * rectangle, in pixels. */ GetClientRect(hWnd, &rect); /* * Convert client coordinates to .01-mm units. * Use iWidthMM, iWidthPels, iHeightMM, and * iHeightPels to determine the number of * .01-millimeter units per pixel in the x- * and y-directions. */ rect.left = (rect.left * iWidthMM * 100)/iWidthPels; rect.top = (rect.top * iHeightMM * 100)/iHeightPels; rect.right = (rect.right * iiWidthMM * 100)/iWidthPels;
rect.bottom = (rect.bottom * iHeightMM * 100)/iHeightPels; /* Load the filename filter from the string table. */ LoadString(hInst, IDS_FILTERSTRING, (LPSTR)szFilter, sizeof(szFilter)); /* * Replace the '%' separators that are embedded * between the strings in the string-table entry * with '\0'. */ for (i=0; szFilter[i]!='\0'; i++) if (szFilter[i] == '%') szFilter[i] = '\0'; /* Load the dialog title string from the table. */
LoadString(hInst, IDS_TITLESTRING, (LPSTR)szTitle, sizeof(szTitle)); /* Initialize the OPENFILENAME members. */ szFile[0] = '\0'; Ofn.lStructSize = sizeof(OPENFILENAME); Ofn.hwndOwner = hWnd; Ofn.lpstrFilter = szFilter; Ofn.lpstrFile= szFile; Ofn.nMaxFile = sizeof(szFile); Ofn.lpstrFileTitle = szFileTitle; Ofn.nMaxFileTitle = sizeof(szFileTitle); Ofn.lpstrInitialDir = (LPSTR)NULL; Ofn.Flags = OFN_SHOWHELP | OFN_OVERWRITEPROMPT;
Ofn.lpstrTitle = szTitle; /* * Display the Filename common dialog box. The * filename specified by the user is passed * to the CreateEnhMetaFile function and used to * store the metafile on disk. */ GetSaveFileName(&Ofn); /* Load the description from the string table. */ LoadString(hInst, IDS_DESCRIPTIONSTRING, (LPSTR)szDescription, sizeof(szDescription)); /* * Replace the '%' string separators that are * embedded between strings in the string-table
* entry with '\0'. */ for (i=0; szDescription[i]!='\0'; i++) if (szDescription[i] == '%') szDescription[i] = '\0'; /* Create the metafile DC. */ hdcMeta = CreateEnhMetaFile(hdcRef, (LPTSTR) Ofn.lpstrFile, &rect, (LPSTR)szDescription); if (!hdcMeta) errhandler("CreateEnhMetaFile", hWnd); /* Release the reference DC. */ ReleaseDC(hWnd, hdcRef);
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Создание Расширенного Метафайла
Эта секция содержит пример, который демонстрирует создание расширенного метафайла, который загружен на диск, использовавший filename определенным пользователем.
Пример использует DC для прикладного окна как ссылка DC. (Windows загружает разрешение данных для этого устройства в расширенном метафайле заголовка.) Приложение извлекает ручку, опознающую это DC вызывая функцию GetDC. Пример использует измерения прикладной области клиента, чтобы определять измерения рамки. Используя измерения прямоугольника возвращался функцией GetClientRect, приложение преобразовывает устройства устройства на .01-millimeter устройства и передает преобразованные величины в функцию CreateEnhMetaFile.
Пример отображает Сохраняемый Как общий диалоговый блок, который позволяет пользователя, чтобы определять filename нового расширенного метафайла. Система добавляет трех символьного .EMF расширения этому filename и передает имя в функцию CreateEnhMetaFile. Пример также вставляет текстовое описание изображения в расширенный метафайл заголовка. Это описание определено как ресурс в таблице строки прикладного файла ресурса. Тем не менее, в рабочем приложении, эта строка должна быть извлечена с заказного управления в общем диалоговом блоке или из отдельного диалогового блока отображенного исключительно с этой целью.
/* Получите ручку на ссылку DC. */ hdcRef = GetDC(hWnd); /* * Определите измерения рамки. * iWidthMM - дисплейная ширина в миллиметрах. * iHeightMM - дисплейная высота в миллиметрах. * iWidthPels - дисплейная ширина на пикселях. * iHeightPels - дисплейная высота на пикселях */ iWidthMM = GetDeviceCaps(hdcRef, HORZSIZE); iHeightMM = GetDeviceCaps(hdcRef, VERTSIZE); iWidthPels = GetDeviceCaps(hdcRef, HORZRES); iHeightPels = GetDeviceCaps(hdcRef, VERTRES);
/* * Извлеките координаты клиента * прямоугольник, на пикселях. */ GetClientRect(hWnd, &rect); /* * Клиент Преобразования координируется на .01-mm устройства. * Используйте iWidthMM, iWidthPels, iHeightMM, и * iHeightPels, ЧТОБЫ определять число * .01-millimeter устройства за пиксель в x- * и y-directions. */ rect.left = (rect.left * iWidthMM * 100)/iWidthPels; rect.top = (rect.top * iHeightMM * 100)/iHeightPels; rect.right = (rect.right * iiWidthMM * 100)/iWidthPels;
rect.bottom = (rect.bottom * iHeightMM * 100)/iHeightPels; /* Загрузите фильтр filename из строки table. */ LoadString(hInst, IDS_FILTERSTRING, (LPSTR)szFilter, sizeof(szFilter)); /* * Замените '%' разделители, которые вставлены * между строками на нанизывать-табличном входе * с '\0. */ для (i=0; szFilter[i]!='\0'; я++) если (szFilter[i] == '%') szFilter[i] = '\0; /* Загрузите диалоговую строку названия из table. */
LoadString(hInst, IDS_TITLESTRING, (LPSTR)szTitle, sizeof(szTitle)); /* Инициализируйте members. OPENFILENAME */ szFile[0] = '\0; Ofn.lStructSize = sizeof(OPENFILENAME); Ofn.hwndOwner = hWnd; Ofn.lpstrFilter = szFilter; Ofn.lpstrFile= szFile; Ofn.nMaxFile = sizeof(szFile); Ofn.lpstrFileTitle = szFileTitle; Ofn.nMaxFileTitle = sizeof(szFileTitle); Ofn.lpstrInitialDir = (LPSTR)NULL; Ofn.Сигнализирует = OFN_SHOWHELP | OFN_OVERWRITEPROMPT;
Ofn.lpstrTitle = szTitle; /* * Отобразите общего диалогового блока Filename. The * filename определенное пользователем пройден * в функцию CreateEnhMetaFile и использованную, чтобы * загрузите метафайл на диск. */ GetSaveFileName(&Ofn); /* Загрузите описание из строки table. */ LoadString(hInst, IDS_DESCRIPTIONSTRING, (LPSTR)szDescription, sizeof(szDescription)); /* * Замените '%' разделители строки, которые * вставленное между строками в строку-таблицу
* вход с '\0. */ для (i=0; szDescription[i]!='\0'; я++) если (szDescription[i] == '%') szDescription[i] = '\0; /* Создайте метафайл DC. */ hdcMeta = CreateEnhMetaFile(hdcRef, (LPTSTR) Ofn.lpstrFile, &rect, (LPSTR)szDescription); если (!hdcMeta) errhandler("CreateEnhMetaFile", hWnd); /* Выпустите ссылку DC. */ ReleaseDC(hWnd, hdcRef);
|
|
|
|
| |