WinCE5.0中应用程序如何直接写屏

简介:   以前曾利用GAPI实现应用程序直接操作显示驱动的FrameBuffer,以提高屏幕绘图和视频播放的效率。GAPI依赖于显示驱动,必须在显示驱动中添加相应的接口才能正常使用。如果平台是我们自己定制的,在WinCE5.0中,我们也可以通过另外一种方法来操作FrameBuffer。

  以前曾利用GAPI实现应用程序直接操作显示驱动的FrameBuffer,以提高屏幕绘图和视频播放的效率。GAPI依赖于显示驱动,必须在显示驱动中添加相应的接口才能正常使用。如果平台是我们自己定制的,在WinCE5.0中,我们也可以通过另外一种方法来操作FrameBuffer。

  以DeviceEmulator为例,我们已经知道FrameBuffer的物理地址是0x30100000,大小为0x100000。那么在应用程序中可以通过如下代码,直接获取操作FrameBuffer的机会。

img_405b18b4b6584ae338e0f6ecaf736533.gif 代码
1       char   * gpLCDBuf;
2      gpLCDBuf  =  ( char * )VirtualAlloc(NULL, 0x100000 ,MEM_RESERVE,PAGE_NOACCESS);
3      VirtualCopy(gpLCDBuf, ( void   * )( 0x30100000 / 256 ),  0x100000 , PAGE_READWRITE  |  PAGE_PHYSICAL  |  PAGE_NOCACHE);
4      memset(gpLCDBuf, 0xFF , 0x100000 );    
5      VirtualFree(gpLCDBuf, 0 ,MEM_RELEASE);

    以上示例代码是将屏幕刷白,当然也可以将它刷黑,或者其他纯色,这样便可以做一个WinCE5.0下测试LCD的小工具了。

  在编译以上代码时,需要包括头文件pkfuncs.h。编译时还可能会出现如下错误,

  C:\WINCE600\PUBLIC\COMMON\OAK\INC\pkfuncs.h(1042) : error C2065: 'REG_TYPE' : undeclared identifier

  简单的处理方法就是在代码中添加一个宏定义,如下,

  #define REG_TYPE DWORD

  对话框的全屏显示,可以通过如下代码实现,  

1      DWORD dwWidth  =  GetSystemMetrics(SM_CXSCREEN);
2      DWORD dwHeight  =  GetSystemMetrics(SM_CYSCREEN);
3 
4      ::SetWindowPos( this -> m_hWnd,HWND_TOPMOST, 0 , 0 ,dwWidth,dwHeight,WS_EX_TOPMOST);

 

 

  

目录
相关文章
|
3月前
|
JavaScript Windows
electron程序运行在某些 windows 上白屏
electron程序运行在某些 windows 上白屏
|
Windows
pywinauto windows桌面应用自动化
桌面应用程序自动化
46503 20
|
安全 Linux API
浅谈 windows 驱动开发
浅谈 windows 驱动开发
548 0
|
Windows
Qt-Windows下发布应用程序
QtWindows下发布应用程序
115 0
|
API 开发工具 开发者
WinCE应用程序的开发
WinCE应用程序的开发是WinCE开发中很重要的一个环节。本文将简单介绍一些WinCE应用程序开发的基本概念。     先说开发工具,目前用得比较多的开发工具有EVC4(SP4)、VS2005、VS2008和Platform Builder。
1202 0
|
Android开发 虚拟化 开发者
Windows 11 运行安卓子系统
win11系统最新更新引入了安卓子系统,不需要模拟器就能运行安卓程序, 这对开发者和普通用户来说都是不错的功能,甚至很多开发者都为了这个功能开始升级win11。