With The Case Of  Release The Power OF  Visual C++ !   HomeProducts | PurchaseSupport | Downloads  
Download Evaluation
Pricing & Purchase?
E-XD++Visual C++/ MFC Products
Features Tour 
Electronic Form Solution
Visualization & HMI Solution
Power system HMI Solution
CAD Drawing and Printing Solution

Bar code labeling Solution
Workflow Solution

Coal industry HMI Solution
Instrumentation Gauge Solution

Report Printing Solution
Graphical modeling Solution
GIS mapping solution

Visio graphics solution
Industrial control SCADA &HMI Solution
BPM business process Solution

Industrial monitoring Solution
Flowchart and diagramming Solution
Organization Diagram Solution

Graphic editor Source Code
UML drawing editor Source Code
Map Diagramming Solution

Architectural Graphic Drawing Solution
Request Evaluation
ActiveX COM Products
Technical Support
  General Q & A
Discussion Board
Contact Us


Get Ready to Unleash the Power of UCanCode .NET


UCanCode Software focuses on general application software development. We provide complete solution for developers. No matter you want to develop a simple database workflow application, or an large flow/diagram based system, our product will provide a complete solution for you. Our product had been used by hundreds of top companies around the world!

"100% source code provided! Free you from not daring to use components because of unable to master the key technology of components!"

MFC Library: CMetaFileDC




A metafile is a series of instructions used to draw one or a group of graphics on a device context. Unlike drawing on a regular device context, a metafile includes its instructions in a normal windows file. The instructions are then used to draw what is necessary. One of the strengths of a metafile is that, because it is a Windows file, it can be accessed by any application that can read it. This means that you can create a metafile in your Visual C++ application and be able to open it in a graphics application like Paint Shop Pro.

Creating a Metafile


In Visual C++, a metafile can be created using the CMetaFileDC class. This class is based on CDC. For this reason, it inherits any type of drawing you can perform on a device context. This significantly reduces the amount of learning.

To start, you can declare a CMetaFileDC variable using its default constructor. Using this variable, call the Create() method to formally initiate the file. The syntax of the CMetaFileDC::Create() method is:

BOOL Create(LPCTSTR lpszFilename = NULL);

This methods takes an optional argument as the name of the file that will hold the instructions. If you don't supply the argument, a default file would be created. After calling the Create() method, you can perform any necessary drawing on the CMetaFileDC variable as you would proceed with a CDC object.

After using the CMetaFileDC variable, you should close it. This is done by calling the Close() method. Its syntax is:


Here is an example:

void CMFCMetaFile1View::OnDraw(CDC* /*pDC*/)
	CMFCMetaFile1Doc* pDoc = GetDocument();
	if (!pDoc)

	// TODO: add draw code for native data here
	CMetaFileDC mfDC;


	CBrush BrushGreen(RGB(0, 125, 5));
	CBrush BrushRed(RGB(255, 2, 5));
	CBrush BrushYellow(RGB(250, 255, 5));
	CBrush BrushBlue(RGB(0, 2, 255));
	CBrush *pBrush;
	CPoint Pt[3];

	// Top Triangle
	Pt[0] = CPoint(125,  10);
	Pt[1] = CPoint( 95,  70);
	Pt[2] = CPoint(155,  70);

	pBrush = mfDC.SelectObject(&BrushGreen);
	mfDC.Polygon(Pt, 3);

	// Left Triangle
	Pt[0] = CPoint( 80,  80);
	Pt[1] = CPoint( 20, 110);
	Pt[2] = CPoint( 80, 140);

	pBrush = mfDC.SelectObject(&BrushRed);
	mfDC.Polygon(Pt, 3);

	// Bottom Triangle
	Pt[0] = CPoint( 95, 155);
	Pt[1] = CPoint(125, 215);
	Pt[2] = CPoint(155, 155);
	pBrush = mfDC.SelectObject(&BrushYellow);
	mfDC.Polygon(Pt, 3);

	// Right Triangle
	Pt[0] = CPoint(170,  80);
	Pt[1] = CPoint(170, 140);
	Pt[2] = CPoint(230, 110);

	pBrush = mfDC.SelectObject(&BrushBlue);
	mfDC.Polygon(Pt, 3);


After creating a metafile, it becomes a regular Windows file:

You can open it in your application when necessary. Here is an example that opens the above metafile when the user clicks the view area of the application:

void CMFCMetaFile1View::OnLButtonDown(UINT nFlags, CPoint point)
	// TODO: Add your message handler code here and/or call default
	CClientDC client(this);
	HMETAFILE hMF = GetMetaFile("Meta1.wmf");

	CView::OnLButtonDown(nFlags, point);

Of course, you can also provides the user with the ability to select a metafile to open using the File Dialog box. As mentioned already, a metafile can also be opened by any application that can read it. For example, here is the above metafile opened in Paint Shop Pro



Copyright ?1998-2009 UCanCode.Net Software , all rights reserved.
Other product and company names herein may be the trademarks of their respective owners.

Please direct your questions or comments to