Microsoft KB Archive/150431

= PRB: Using Enhanced Metafiles in COleServerItem =

Article ID: 150431

Article Last Modified on 11/21/2006

-

APPLIES TO

 Microsoft Foundation Class Library 4.2, when used with:  Microsoft Visual C++ 4.0 Standard Edition

 Microsoft Visual C++ 4.1 Subscription

 Microsoft Visual C++ 4.2 Enterprise Edition

 Microsoft Visual C++ 4.2 Professional Edition</li></ul> </li></ul>

-

<div class="notice_section">

This article was previously published under Q150431

<div class="symptoms_section">

SYMPTOMS
Enhanced metafiles do not appear in a non-active state in a OLE client when they are used by the server to render the image. A call to CDC::PlayMetaFile in the OnDraw of the COleServerItem-derived class fails if it is passed an enhanced metafile.

<div class="cause_section">

CAUSE
When an OLE client application asks the server for a metafile representation of the server data when it is in an inactive state or using Paste Special, the application asks for it in a standard metafile format (CF_METAFILEPICT). The server cannot respond to this request. However, most images can be rendered without a problem using standard metafiles.

When COleClientItem::Draw calls the IViewObject2::Draw to render the cached metafile representation, it needs to receive a metafile and not an enhanced metafile. When COleServerItem::OnDraw is called, the DC passed is for a standard metafile, not an enhanced metafile, so the rendering into the DCneeds to be limited to items understood by a standard metafile.

<div class="resolution_section">

RESOLUTION
If your server is using enhanced metafiles, and the client is asking it to render to an standard metafile, you need to make a conversion. You can use GetEnhMetafileBits to get each command of the enhanced metafile and copy the commands to a standard metafile using SetMetafileBitsEx, or you can use the GetWinMetaFileBits function to make the conversion.

<div class="status_section">

STATUS
This behavior is by design.

<div class="moreinformation_section">

MORE INFORMATION
Use the metafile format rather than the enhanced metafile. Check the documentation on the features of enhanced metafiles to determine whether this usage is appropriate for your application.

<div class="references_section">