CEDraw是一个用于WinCE平台的图形库,它通过使用双缓冲和直接写入视频缓冲区的技术来提高绘图速度。该库拥有自己的图形算法,使得绘图速度比WinGDI快得多。
CEDraw支持以下功能:
在开始使用CEDraw库之前,需要将一些支持文件复制到系统中。
如果使用模拟模式,请将...\CEGraph\DLL\X86Em目录下的两个DLL文件(gx.dll和cegl.dll)复制到模拟Windows系统目录中,即D:\Windows CE Tools\wce300\MS Pocket PC\emulation\palm300\windows目录下。然后将...\CEGraph\Res目录下的Hzk16文件复制到WinCE根目录,即D:\Windows CE Tools\wce300\MS Pocket PC\emulation\palm300目录下。
如果使用ARM系统,请将...\CEGraph\DLL\Arm目录下的两个DLL文件复制到Pocket PC windows系统目录中。然后将HZK16文件复制到系统根目录。
设置包含目录为...\CEGraph\Include,库目录为...\CEGraph\Lib\X86Em(如果使用模拟系统)或...\CEGraph\Lib\Arm(如果使用PocketPC)。
打开项目设置->链接->对象/库模块,添加CEGL.lib。
包含CEDraw图形头文件:CEGL.h
#include "stdafx.h"
#include "SDKSample.h"
#include <commctrl.h>
#include <cegl.h>
创建CEDraw对象:
CCEDraw m_ceDraw;
在CreateWindow()之后初始化:
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;
}
在WndProc函数中处理WM_PAINT消息:
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;
在Render函数中进行绘制操作:
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.4f);
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();
}
在WM_DESTROY消息中释放资源:
case WM_DESTROY:
m_ceDraw.Release();
PostQuitMessage(0);
break;
这个图形库不能直接在MFC appwizard生成的框架中使用,因为它有两个窗口,一个是框架窗口,另一个是子窗口。已经写了一个支持MFC的框架。如果有人想在MFC中使用它,请给发邮件。
CEGLDLLPrj是CE图形库的DLL项目。强烈建议如果想使用这个库,使用这个项目来构建自己的DLL和Lib文件。要构建这个项目,可以设置包含目录和库目录与...\CEGraph\include & lib(与步骤1目录相同)。
SDKSample项目是未使用MFC的示例。在设置和复制库和DLL文件后构建它。