
Introduction
CEDraw is high speed
graphics library
in
WinCE. It depends
on GAPI . This
code was written
in
C++ using
embedded VC++ to
compile it. Testing was done
on an iPaq h3600 with WinCE
3.0. CEDraw use double
buffer and direct write
video buffer technology to
enhance
Draw speed. With
its own graphics arithmetic
the drawing 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
( Support Bmp,Gif,Jpg
format, Support alpha
blend )
-
Draw Text
( Own font file, support
Chinese, support gdi
text )
How to use it
Before use the CEDraw
Library, you must copy some
support file in you system.
a. Copy the dll to you
WinCE system
directory
- If using in
emulation mode, copy two
of the dll in
…\CEGraph\DLL\X86Em
directory ( gx.dll &
cegl.dll) to the
emulation
windows system
directory, always in the
D:\Windows
CE Tools\wce300\MS
Pocket
PC\emulation\palm300\windows
directoty, then copy the
file Hzk16 in the
…\CEGraph\Res directory
to the WinCE Root
directory, always in D:\Windows
CE Tools\wce300\MS
Pocket
PC\emulation\palm300
- if using an Arm
system, copy the two
DLLs in
…\CEGraph\DLL\Arm (
gx.dll & cegl.dll) to
the Pocket PC
windows system
directory. Then copy the
file HZK16 to the System
Root directory.
There a 4 step to use it:
Step 1 Directory:
Set the including
directory to
…\CEGraph\Include
And lib directory to
…\CEGraph\Lib\X86Em ( if
using in emulation system)
or …\CEGraph\Lib\Arm ( if
using in pocketpc)
Open the project
setting->Link->Object/library
Modules
Add CEGL.lib
Setp 2 Head file
Including:
Include the cedraw
graphics header file: CEGL.h
Collapse |
Copy Code
#include "stdafx.h"
#include "SDKSample.h"
#include <commctrl.h>
#include <cegl.h> // Include CE Graphics library
Step 3 Create the
CE
Draw
Class:
Collapse |
Copy Code
CCEDraw m_ceDraw;
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
TCHAR szTitle[MAX_LOADSTRING]; TCHAR szWindowClass[MAX_LOADSTRING];
hInst = hInstance; 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;
}
m_ceDraw.Create( hWnd );
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
Step 4: Using CE
Draw
freely
Collapse |
Copy Code
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(); break;
...
}
}
void Render( void )
{
POINT pt[5] ={ { 140, 100 }, { 70,120 }, { 104, 150 },
{ 210, 122 }, { 75, 200 } };
CCEPen cePen;
cePen.CreatePen( 1, 1, m_ceDraw.ConvertColor( 255, 0, 0 ) );
m_ceDraw.SetGDIObject( &cePen );
CCEBrush ceBrush1, ceBrush2;
ceBrush1.CreateBrush( 1, m_ceDraw.ConvertColor( 200, 200, 100 ), 1 );
ceBrush2.CreateBrush( 1, m_ceDraw.ConvertColor( 0, 240, 0 ), 1 );
m_ceDraw.SetGDIObject( &ceBrush1 );
m_ceDraw.BeginDraw();
m_ceDraw.Clear( (DWORD)255 );
m_ceDraw.DrawLine( 1, 1, 100, 100 );
m_ceDraw.DrawRect( 10, 10, 110, 80 );
m_ceDraw.FillRect( 30, 30, 50, 50 );
m_ceDraw.SetGDIObject( &ceBrush2 ); m_ceDraw.FillRect( 40, 40, 100, 100, 0.4 );
m_ceDraw.FillPolygon( pt, 5 ); m_ceDraw.SetGDIObject( &ceBrush1 ); m_ceDraw.FillPolygon( pt, 5, 40, 40 );
CCEBitmap ceBmp1,ceBmp2;
ceBmp1.LoadBitmap( &m_ceDraw, L"windows\\wcelogo1.gif" );
ceBmp2.LoadBitmap( &m_ceDraw, L"windows\\welcomehead.gif" );
ceBmp2.BitBlt( &m_ceDraw, 1, 80, 0, 0, 0, 0, SRCALPHA, 0.6f );
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 );
m_ceDraw.EndDraw();
m_ceDraw.Flip(); }
Step 5:
Don’t forgot to release
it:
Collapse |
Copy Code
case WM_DESTROY:
m_ceDraw.Release();
PostQuitMessage(0);
break;
Tips:
This
graphics library
cannot be directly used in
an MFC appwizard generated
frame. Because it has two
windows, one is frame
window, the other is child
Window. I’ve write a
Framework that supports MFC.
If anyone who want to use it
in MFC email me.
- The CEGLDLLPrj is
the dll project of CE
Graphics Library.
It's high recommend that
if you want to use this
library, use the project
to build your own DLL &
Lib Files. To Build this
project. You Can setting
the include directory
and lib directory with
...\CEGraph\include &
lib (The same as Step 1
Directory )
- The SDKSample
Project is the sample
NOT using MFC. Build it
after setting & copying
the library& DLL Files.