Introduction to the Windows CE High-Speed Graphics Library | CodeGuru

Introduction to the Windows CE High-Speed Graphics Library

Environment: Windows CE Introduction CE Draw is high-speed graphics library in Windows CE. It depends on GAPI. This code was writen in C++ and uses embedded Visual C++ to compile it. It was tested on an iPaq h3600 with Windows CE 3.0. CE Draw uses double buffer and direct-write video buffer technology to enhance Draw’s […]

Written By
CodeGuru Staff
CodeGuru Staff
Jun 26, 2002
3 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

Environment: Windows CE

Introduction

CE Draw is high-speed graphics library in Windows CE. It depends on GAPI. This code was writen in C++ and uses embedded Visual C++ to compile it. It was tested on an iPaq h3600 with Windows CE 3.0. CE Draw uses double buffer and direct-write video buffer technology to enhance Draw’s speed. With its own graphics arithmetic, the draw speed is much faster than WinGDI.

CE Draw supports these functions:

  • Draw Pixel
  • Fill Screen
  • Draw Line, HLine, VLine
  • Draw Polyline
  • Draw Polygon
  • Draw Rectangle
  • Fill Rectangle (with alpha blend support)
  • Fill Polygon
  • Draw Bitmap (supports Bmp, Gif, and Jpg formats; also supports alpha blend)
  • Draw Text (Own font file, supports Chinese and gdi text)

SDKSample Screen Shot:

How to Use It

Before you use the CE Draw Library, you must copy some support files to you system.

Copy the DLL to your Windows CE system directory

If you are using the program in an emulation system, copy two of the DLLs in the \CEGraph\DLL\X86Em directory (gx.dll and cegl.dll) to the emulation windows system directory, always in D:\Windows CE Tools\wce300\MS Pocket PC\emulation\palm300\windows. Then copy the file Hzk16, which is in the \CEGraph\Res directory to the WinCE Root directory. It is always in D:\Windows CE Tools\wce300\MS Pocket PC\emulation\palm300.

If you are using the program in an Arm system, copy two of the DLLs in \CEGraph\DLL\Arm (gx.dll and cegl.dll) to the Pocket PC Windows system directory. Then copy the file HZK16 to the System Root directory.

There are four steps to using it:

  1. Step 1: Directory

    Set the including directory to \CEGraph\Include
    And lib directory to \CEGraph\Lib\X86Em (if using in an emulation system)
    Or \CEGraph\Lib\Arm (if using on a Pocket PC system)

    Open the project: Setting->Link->Object/library Modules

    Add CEGL.lib

  2. Step 2: Head File Including
    Include the CE Draw graphics header file CEGL.h
    #include "stdafx.h"
    #include "SDKSample.h"
    #include <commctrl.h>
    
    #include <cegl.h> // Include CE Graphics library
    
  3. Step 3: Create the CE Draw Class
    // Create the CE Draw Object>
    CCEDraw m_ceDraw;
    
    // Initlizate after CreateWindow()
    
    BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    
    {
    HWND hWnd;
    TCHAR szTitle[MAX_LOADSTRING];       // The title bar text
    TCHAR szWindowClass[MAX_LOADSTRING]; // The window class name
    
    hInst = hInstance; // Store instance handle in our global variable
                       // Initialize global strings
     LoadString( hInstance,
                 IDC_SDKSAMPLE,
                 szWindowClass,
                 MAX_LOADSTRING);
     MyRegisterClass(hInstance, szWindowClass);
     LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
     hWnd = CreateWindow( szWindowClass,
                          szTitle,
                          WS_VISIBLE,
                          0, 0,
                          GetSystemMetrics(SM_CXSCREEN),
                          GetSystemMetrics(SM_CYSCREEN),
                          NULL,
                          NULL,
                          hInstance,
                          NULL);
     if (!hWnd)
     {
       return FALSE;
     }
    
    // Create the CE Grahpics Library
    m_ceDraw.Create( hWnd );
    
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);
    
    return TRUE;
    }
    
  4. Step 4: Using CE Draw Freely
    LRESULT CALLBACK WndProc( HWND hWnd,
                              UINT message,
                              WPARAM wParam,
                              LPARAM lParam)
    {
      HDC hdc;
      int wmId, wmEvent;
      PAINTSTRUCT ps;
      TCHAR szHello[MAX_LOADSTRING];
    
      switch (message)
      {
       case WM_PAINT:
       RECT rt;
       hdc = BeginPaint(hWnd, &ps);
       GetClientRect(hWnd, &rt);
       LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
       DrawText(hdc, szHello, _tcslen(szHello), &rt,
                DT_SINGLELINE | DT_VCENTER | DT_CENTER);
       EndPaint(hWnd, &ps);
    
       Render(); // Render screen
       break;
    
      }
    }
    
    void Render( void )
    {
      POINT pt[5] ={ { 140, 100 },
                     { 70,120 },
                     { 104, 150 },
                     { 210, 122 },
                     { 75, 200 } };
    
    // Create the CE pen object...
    CCEPen cePen;
    cePen.CreatePen( 1, 1, m_ceDraw.ConvertColor( 255, 0, 0 ) );
    // Convert RGB color to CE support Color
    
    // Select it to the graphics system
    
    m_ceDraw.SetGDIObject( &cePen );
    
    // Create the CE brush object...
    CCEBrush ceBrush1, ceBrush2;
    ceBrush1.CreateBrush( 1, m_ceDraw.ConvertColor( 200, 200, 100 ), 1);
    ceBrush2.CreateBrush( 1, m_ceDraw.ConvertColor( 0, 240, 0 ), 1 );
    
    // Select it to the graphics system
    
    m_ceDraw.SetGDIObject( &ceBrush1 );
    
    // Begin Draw
    m_ceDraw.BeginDraw();
    m_ceDraw.Clear( (DWORD)255 );
      // Clear screen use white color
    
    m_ceDraw.DrawLine( 1, 1, 100, 100 );   // Draw line
    
    m_ceDraw.DrawRect( 10, 10, 110, 80 );  // Draw Rect
    
    m_ceDraw.FillRect( 30, 30, 50, 50 );   // Fill Rect
    
    m_ceDraw.SetGDIObject( &ceBrush2 );    // Select another color brush
    m_ceDraw.FillRect( 40, 40, 100, 100, 0.4 );
                                           // fill Rect with alpha blend
    
    m_ceDraw.FillPolygon( pt, 5 );         // Draw a polygon
    m_ceDraw.SetGDIObject( &ceBrush1 );    // Select another color brush
    m_ceDraw.FillPolygon( pt, 5, 40, 40 ); // Draw a polygon
    
    
    CCEBitmap ceBmp1,ceBmp2;
    ceBmp1.LoadBitmap( &m_ceDraw, L"windows\\wcelogo1.gif" );
    // Load Gif picture from file
    ceBmp2.LoadBitmap( &m_ceDraw, L"windows\\welcomehead.gif" );
    ceBmp2.BitBlt( &m_ceDraw, 1, 80, 0, 0, 0, 0, SRCALPHA, 0.6f );
    // Draw bitmap with alpha blend
    ceBmp1.BitBlt( &m_ceDraw, 1, 200, 0, 0, 0, 0, SRCALPHA, 0.6f );
    
    POINT ptText = { 1, 300 };
    m_ceDraw.DrawText( &ptText, "Hello CE Graph!", 16, 1 );
    // Draw text with pen color
    
    // End Draw
    m_ceDraw.EndDraw();
    m_ceDraw.Flip();  // Flip the back buffer to the video buffer
    }
    
  5. Step 5: Releasing Memory

    Don’t forget to release it.

    case WM_DESTROY:
      m_ceDraw.Release();
    
    PostQuitMessage(0);
    
    break;
    
Advertisement

Tips

This graphics package cannot be directly used in a MFC appwizard-generated frame because it has two windows; one is a frame window and the other is a child window. I’ve written a frame code that supports MFC. If anyone wants to use it in MFC, write mail to me.

  • The CEGLDLLPrj is the DLL project of CE Graphics Library. It’s highly recommended that, if you want to use this library, use the project to build your own DLL and Lib files. To build this project, you can set the include and lib directories with …\CEGraph\include and lib. (The is the same as Step 1’s Directory.)
  • The SDK Sample Project is the sample not using MFC. Build it after setting and copying the library and DLL files.

Comments

Please report any bugs or feedback to jiet@msn.com. Thanks.

This code uses GAPI Enum. Thanks to the writer.

Downloads

Download Source – 307 Kb

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.