Pocket PC关键字导航
短消息 Web站点 SQL Server CE ActiveX XML
在我们学习离屏(OFF SCREEN)技术之前,让我们看看ON SCREEN是什么?为什么没有任何游戏程序使用这种方法?此外,还有另外一个基础问题,我们怎么在窗口的客户区绘制文字、图片或者是图画?
通常,在屏幕上显示任何东西的方法是使用GDIs(图形设备接口)和APIs(应用程序接口)。Windows的窗口区域被划分成两个重要部分:客户区和非客户区(比如菜单、标题栏和边界框)。大多数窗口是可以移动的。因此它所显示的内容也跟着窗口自己的左上角一起关联移动。GDIs和APIs帮助我们管理这种关联。
Windows的GDI是用来对所有硬件设备提供一种硬件无关支持的程序。因为各个厂家的硬件技术是不同的,所以用这些相同的代码是无法获得硬件的最大性能。实现它们的目的只是保证支持。然而,很多有些开发者想要获得硬件设备的最大性能,他们不用GDIs和APIs,而是直接访问硬件。当然这些方法也可以工作,但却依赖于使用的硬件,它们可能无法在全部的设备上工作。
Windows CE的显示技术又如何呢?有人都能改变显示适配器吗?当然不能,因为它是一种嵌入式系统。通常硬件厂商不会在系统中包含优化代码。然而,这种显示速度已经能够应付某些游戏类型了。
Windows GDIs
设备正文的句柄,通常表示为hDC,是一个连接GDI程序的32位的整数值。通常,大多数窗口有它自己的DC(设备文本),并且你可以通过它的hWnd(窗口句柄)获得它的DC。方法如下:
HDC hDC; hDC = GetDC(hWnd); 要调用GDIs和APIs,例如画一条线,你需要将hDC作为这些GDI函数的第一个参数。
MoveToEx(hDC,0,0,NULL); //将作图点移动到(0,0) LineTo(hDC,240,300); //从作图点画线到(240,300) 做完这些,你还必须要从内存中释放hDC
ReleaseDC(hWnd,hDC); 这里还有一个特殊的绘图工作,那就是在收到WM_PAINT消息时,这意味着系统要求你画出你的客户区域,这些代码通常在MainWndProc中完成。下面的代码就的功能就是在窗口的正中央显示文字"hello"。另外,在WM_PAINT消息处理中,除了GetDC,还有另一种更方便的从窗口获取hDC的方法,那就是BeginPaint和EndPaint。
LRESULT MainWndProc(HWND hWnd, UINT message, WPARAM uParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hDC; RECT rcClient; switch(message) { case WM_PAINT: hDC = BeginPaint(hWnd,&ps); GetClientRect(hWnd,&rcClent); DrawText(hDC,L"Hello",5, &rcClient,DT_CENTERDT_VCENTER); EndPaint(hWnd,&ps); break; case WM_LBUTTONDOWN: DestroyWindow(hWnd); break; default: DefWindowProc(hWnd, message, uParam, lParam); } return 0; } 这些代码中GetClientRect用来获得整个客户区域的矩形范围,DrawText用来在屏幕上这个举行范围的中心画出文字"hello"。
当然我们也可以在别的地方进行绘制,你可以再试试下面这些代码。
LRESULT MainWndProc(HWND hWnd, UINT message, WPARAM uParam, LPARAM lParam) { HDC hDC; int nXpos; int nYpos;
switch(message) {
case WM_LBUTTONDOWN: nXpos = LOWORD(lParam); nYpos = HIWORD(lParam); hDC = GetDC(hWnd); MoveToEx(hDC,nXpos-4,nYpos-4,NULL); LineTo(hDC,nXpos+4,nYpos+4); MoveToEx(hDC,nXpos+4,nYpos-4,NULL); LineTo(hDC,nXPos-4,nYpos+4); ReleaseDC(hWnd,hDC); break;
case WM_KEYDOWN: DestroyWindow(hWnd); break;
default: DefWindowProc(hWnd, message, uParam, lParam); }
return 0; } 上面这种直接在屏幕(设备文本)上绘图的方法,就叫做ON SCREEN。在下面,我将给你演示为着这种方法不适合运用在游戏程序中。让我们看看下面这些长一些的代码。
上一篇:轻松垮入移动应用程序开发的大门
下一篇:Palm OS 3.5重要系统错误
|