Операционные системы. Марапулец Ю.В. - 39 стр.

UptoLike

Составители: 

Далее остается только разблокировать память и передать дескриптор
метафайла в буфер обмена.
GlobalUnlock( hGMem ) ;
TransferToClipboard( hwnd, hGMem, CF_METAFILEPICT
);
Чтение метафайла. Чтение метафайла начинается с открытия буфера
обмена, запроса дескриптора блока памяти, в котором содержится метафайл, и
последующей блокировки этой области.
OpenClipboard( hwnd );
hGMem = GetClipboardData( CF_METAFILEPICT );
lpMFP = (LPMETAFILEPICT) GlobalLock( hGMem );
Теперь переменная lpMFP содержит указатель блока памяти, в котором
находится метафайл, или, точнее, структуры METAFILEPICT,
которая, в свою
очередь, хранит указатель собственно метафайла.
Но прежде чем метафайл будет воспроизведен, необходимо решить ряд
дополнительных задач, начав с сохранения текущего контекста устройства.
SaveDC( hdc );
CreateMapMode( hdc, lpMFP, cxWnd, cyWnd ) ;
Далее информация, которая содержится в структуре METAFILEPICT,
передается на обработку функции CreateMapMode. Это делается потому, что
расшифровка информации о режиме отображения и о размерах - задача
довольно сложная.
Функция CreateMapMode вызывается с четырьмя параметрами, которые
задают дескриптор контекста устройства для приложения, указатель структуры
METAFILEPICT
и размеры окна приложения.
BOOL CreateMapMode( HDC hdc, LPMETAFILEPICT lpMFP,
int cxWnd, int cyWnd )
{
long lMapScale;
int nHRes, nVRes, nHSize, nVSize;
SetMapModet hdc, lpMFP->mm );
if( lpMFP->mm!=MM_ISOTROPIC&&lpMFP->mm!= MM_ANISOTROPIC
)
return( TRUE ) ;
Сначала функция CreateMapMode устанавливает режим отображения,
заданный для метафайла. Если задано какое-либо другое значение, не
39
     Далее остается только разблокировать память и передать дескриптор
метафайла в буфер обмена.

     GlobalUnlock( hGMem ) ;
     TransferToClipboard( hwnd, hGMem, CF_METAFILEPICT );

     Чтение метафайла. Чтение метафайла начинается с открытия буфера
обмена, запроса дескриптора блока памяти, в котором содержится метафайл, и
последующей блокировки этой области.

     OpenClipboard( hwnd );
     hGMem = GetClipboardData( CF_METAFILEPICT );
     lpMFP = (LPMETAFILEPICT) GlobalLock( hGMem );

     Теперь переменная lpMFP содержит указатель блока памяти, в котором
находится метафайл, или, точнее, структуры METAFILEPICT, которая, в свою
очередь, хранит указатель собственно метафайла.
     Но прежде чем метафайл будет воспроизведен, необходимо решить ряд
дополнительных задач, начав с сохранения текущего контекста устройства.

     SaveDC( hdc );
     CreateMapMode( hdc, lpMFP, cxWnd, cyWnd ) ;

     Далее информация, которая содержится в структуре METAFILEPICT,
передается на обработку функции CreateMapMode. Это делается потому, что
расшифровка информации о режиме отображения и о размерах - задача
довольно сложная.
     Функция CreateMapMode вызывается с четырьмя параметрами, которые
задают дескриптор контекста устройства для приложения, указатель структуры
METAFILEPICT и размеры окна приложения.

BOOL CreateMapMode( HDC hdc, LPMETAFILEPICT lpMFP,
                  int cxWnd, int cyWnd )
{
    long lMapScale;
    int nHRes, nVRes, nHSize, nVSize;
    SetMapModet hdc, lpMFP->mm );
    if( lpMFP->mm!=MM_ISOTROPIC&&lpMFP->mm!= MM_ANISOTROPIC
  )
           return( TRUE ) ;

     Сначала функция CreateMapMode устанавливает режим отображения,
заданный для метафайла. Если задано какое-либо другое значение, не


                                    39