Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
This section provides an example of EMF+ string drawing as generated by GDI+ functions.
The following GDI+ example generates an EmfPlusDrawString record (section 2.3.4.14) and EmfPlusFont and EmfPlusStringFormatData objects (sections 2.2.1.3 and 2.2.2.44).
-
GdiplusStartupInput gdiplusStartupInput; GdiplusStartupOutput gdiplusStartupOutput; ULONG_PTR gdiplusToken = 0; int CALLBACK WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) { // InitializeGdiPlus GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, &gdiplusStartupOutput); HDC DeviceContext = GetDC( nullptr ); Metafile File( L"DrawString.emf", DeviceContext, EmfTypeEmfPlusOnly, L"DrawString Demo" ); Graphics RenderTarget( &File ); FontFamily Family( L"Arial" ); Font EffectiveFont( &Family, 40.0f, FontStyle::FontStyleUnderline, UnitPixel ); RectF LayoutRect( 0, 0, 100, 100 ); Gdiplus::StringFormat Format( 0, 0 ); Format.SetAlignment( Gdiplus::StringAlignment::StringAlignmentFar ); Gdiplus::Rect GradientRect( 0, 0, 100, 100 ); Gdiplus::LinearGradientBrush TestBrush( GradientRect, Gdiplus::Color( 0xff, 0x00, 0x00 ), Gdiplus::Color( 0x00, 0x00, 0xff ), 0.0f ); const wchar_t HelloWorld[] = L"Hello World 1 2 3 4!"; RenderTarget.DrawString( HelloWorld, ARRAYSIZE(HelloWorld) - 1, &EffectiveFont, LayoutRect, &Format, &TestBrush ); ReleaseDC( nullptr, DeviceContext ); return 1; }
The EMF+ metafile generated by the preceding GDI+ example renders the following image:
Figure 6: EMF+ string drawing example