WinCE图形库CEDraw的使用指南

CEDraw是一个用于WinCE平台的图形库,它通过使用双缓冲和直接写入视频缓冲区的技术来提高绘图速度。该库拥有自己的图形算法,使得绘图速度比WinGDI快得多。

CEDraw支持以下功能:

  • 绘制像素
  • 填充屏幕
  • 绘制线(直线、水平线、垂直线)
  • 绘制折线
  • 绘制多边形
  • 绘制矩形
  • 填充矩形(支持alpha混合)
  • 填充多边形
  • 绘制位图(支持Bmp、Gif、Jpg格式,支持alpha混合)
  • 绘制文本(支持自定义字体文件,支持中文,支持GDI文本)

如何使用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文件后构建它。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485