![]() |
Platforms, Frameworks & Libraries »
Mobile Development »
Graphics and Multimedia
Intermediate
High Speed Graphics Library for WinCEBy Jie TangCEDraw is high speed graphics library in WinCE |
C++, eVC 3.0, Windows, Mobile, Visual Studio, MFC, Dev
|
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||

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:
Before use the CEDraw Library, you must copy some support file in you system.
a. Copy the dll to you WinCE system directory
There a 4 step to use it:
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
Include the cedraw graphics header file: CEGL.h
#include "stdafx.h" #include "SDKSample.h" #include <commctrl.h> #include <cegl.h> // Include CE Graphics library
// Create the CE Draw Object: CCEDraw m_ceDraw; // Initialize 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; }
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;
// Convert RGB color to CE support Color
cePen.CreatePen( 1, 1, m_ceDraw.ConvertColor( 255, 0, 0 ) );
// 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 an polygon
m_ceDraw.SetGDIObject( &ceBrush1 ); // Select another color brush
m_ceDraw.FillPolygon( pt, 5, 40, 40 ); // Draw an polygon
CCEBitmap ceBmp1,ceBmp2;
// Load Gif picture from file
ceBmp1.LoadBitmap( &m_ceDraw, L"windows\\wcelogo1.gif" );
ceBmp2.LoadBitmap( &m_ceDraw, L"windows\\welcomehead.gif" );
// Draw bitmap with alpha blend
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 };
// Draw text with pen color
m_ceDraw.DrawText( &ptText, "Hello CE Graph!", 16, 1 );
// End Draw
m_ceDraw.EndDraw();
m_ceDraw.Flip(); // Flip the back buffer to the video buffer
}
Don�t forgot to release it:
case WM_DESTROY: m_ceDraw.Release(); PostQuitMessage(0); break;
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.
Please report any bugs or feedback to jiet@msn.com
This Code using GAPI Enum. Thanks to the Writer.
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 24 Jun 2002 Editor: Chris Maunder |
Copyright 2002 by Jie Tang Everything else Copyright © CodeProject, 1999-2009 Web20 | Advertise on the Code Project |