WinCE控制面板添加应用程序+WinCE开始菜单中添加应用程序+WinCE桌面墙纸及图标更换+WinCE文件目录定制及内存调整

1.WinCE控制面板添加应用程序

WinCE 系统中的控制面板和 Windows 系统中的控制面板原理是一样的,里面就是包含了一些应用程序。 WinCE 系统的控制面板由 Ctlpnl.exe Control.exe 和一些 .cpl 文件组成 ,其中 Ctlpnl.exe Control.exe 用于控制控制面板的文件夹显示和架构,而 .cpl 文件和控制面板中的实际应用程序相对应。

 

WinCE 的控制面板中的每个应用程序都由两部分组成:应用程序本身和所对应的 .cpl 文件。实际上 .cpl 文件就是一个 dll ,在该 dll 中会导出 CPLApplet 函数,该函数会处理来自控制面板的消息 (CPL_INIT, CPL_DBCLK, CPL_STOP ) ,然后根据相应的消息来调用应用程序。

 

先来看一下 CPlApplet 函数,如下:

LONG CPlApplet(HWND hwndCPl, UINT msg, LPARAM lParam1, LPARAM lParam2)

hwndCPl :控制面板窗口的句柄

msg :发给控制面应用程序的消息

lParam1 :消息参数 1

lParam2 :消息参数 2

http://blog.csdn.net/nanjianhui/archive/2009/07/10/4336897.aspx


2.WinCE开始菜单中添加应用程序

  添加应用程序到 WinCE 的开始菜单中应该是一个比较常用的功能,在产品定制的时候,添加本产品的应用到 StartMenu 中,让用户可以方便启动程序,下面就来介绍一下:


先说一下原理,其实 WinCE 启动以后,点击 Start ,然后点击 Programs ,里面所能看到的应用其实也都是以文件的形式存放的,它们存放在 /Windows/Programs 目录下面,都是一些快捷方式文件,这些快捷方式文件连接了真正的应用程序 ,就这么简单。

 http://blog.csdn.net/nanjianhui/archive/2009/07/01/4313044.aspx


3.WinCE桌面墙纸及图标更换

 关于 WinCE 的墙纸,是在注册表中设置的,编译完 WinCE 工程以后,所有的 reg 文件中的内容都会被合并为 reginit.ini 文件 。打开这个文件,可以找到如下内容:

[HKEY_CURRENT_USER/ControlPanel/Desktop]

            "wallpaper"=//Windows//WindowsCE.bmp

 

默认情况下,显示的是 WindowsCE.bmp 文件,但是被编译工程的 release 目录下并没有 WindowsCE.bmp 文件,倒是可以看到 windowsce_qvgap.bmp windowsce_vgal.bmp 两个文件。这里需要看一下 /WINCE600/public/shell/files/shell.bib 文件中的定义就明白了。

 

    说白了,更换墙纸就是改注册表设置。最简单的方法就是修改 project.bib project.reg 文件 。首先在 project.bib 文件中添加如下内容:

kungfuPanda.bmp   d:/WINCE600/OSDesigns/Emulator/Emulator/RelDir/DeviceEmulator_ARMV4I_Release/wall.bmp         NK  S

然后在 project.reg 文件添加如下内容:

[HKEY_CURRENT_USER/ControlPanel/Desktop]

            "wallpaper"="//Windows//kungfuPanda.bmp"

 

最后将这两个文件拷贝到工程编译的 release 目录下面,重新 Makeimg 就可以了。在 WinCE 启动以后,我们会看到墙纸已经被更换,同样还能看到桌面上的 ”My Device” ”Recycle Bin” ,现在我想把他们的图标和名字也更换了,当然还要从注册表入手..................


4. WinCE文件目录定制及内存调整


   这个说起来比较简单, WinCE 的文件目录结构以及文件的位置都是在 DAT 文件中定义的。所有的 dat 文件会在 WinCE 编译时合并成 initobj.dat 文件, WinCE 会根据 DAT 中的描述生成相应目录。

关于 DAT 的格式,可以参考我以前的一片文章: ”WinCE BSP DAT 文件介绍 ,看了就明白了。

 

我一般在 project.dat 中定制自己想要的目录结构,举个例子如下:

root:-Directory("Sounds")

root:-Directory("Movies")

Directory("/Movies"):-Directory("Chinese")

Directory("/Movies"):-Directory("English")

Directory("/Sounds"):-File("hello.wav", "/Windows/hello.wav")

 

应该比较好理解,创建两个根文件夹 Sounds Movies ,在 Movies 中创建两个子文件夹 Chinese English ,将 hello.wav 拷贝到 Sounds 目录下。

编辑完 project.dat 以后,重新 Makeimg 就可以了。启动 WinCE 就可以看到所创建的文件夹了。

 

 

  接下来说一下 WinCE 内存的定制。 WinCE 系统可使用的内存被分为 Storage Memory Program Memory 两部分。 Storage Memory 用于 Object Store ,而 Program Memory 用于程序内存。

 

 

关于 Object Store ,在 WinCE 中是指一个可以永久保存数据的存储空间 ,即使在掉电的情况下,数据可以在备份电源的支持下不丢失,达到永久保存的效果。其实就是一块内存,一般包括文件系统,数据库和系统注册表 Object Store 的最大空间不能超过 256MB ,其中所能包含的最大文件是 32MB Object Store 中是由很多 Object 组成,这些 Object 可能是一个文件,一个数据库,一条数据库记录,一个注册表键,一个键值等。

Object Store 中, WinCE 系统会分配给每一个 Object 一个 ID ,被称为 CEOID 。每个 Object CEOID Volume 中都是唯一的。同样,在 Object Store 中的每一个 Volume 也有一个 ID ,被称为 CEGUID ,这样使用 CEGUID CEOID 就可以在 Object Store 中找到相应的 Object 了。

顺便介绍个函数:

BOOL CeOidGetInfoEx( PCEGUID pceguid,  CEOID oid, CEOIDINFO* poidInfo)

 

   调用该函数可以获得 Object Store 中某个 Object 的信息, pceguid oid 是要查找对象的 CEGUID CEOID poidInfo Object 的信息。

那么如何获得 CEGUID CEOID 呢?对于不同的 Object 类型,有不同的函数,如下:

Directory or File FindFirstFile(..) / FindNextFile(..) / GetFileInformationByHandler(..)

Database CeCreateDatabaseEx2(..) / CeFindNextDatabaseEx(..)

Database record CeSeekDatabaseEx(..) / CeReadRecordPropsEx(..) / CeWriteRecordPropsEx(..)

Mounted Database volume CeMountDBVol(..) / CeEnumDBVolumes(..)

 

所以, WinCE 系统中,对内存的调节就是在调整 Object Store 和程序内存的大小。默认情况下是 Storage Memory/Program Memory 各占一半。有三种方法可以实现对内存的调整:

1. config.bib 文件中调整 FSRAMPERCENT ,具体如何设置在 BIB 文件的介绍中解释过,这里不多说了。

2. OAL 中调用 pOEMCalcFSPages 函数为 Object Store 分配内存。

3. WinCE 启动以后,进入系统的 control panel ,然后打开 System ,选择 Memory 在界面中进行调整。

4. 通过函数 SetSystemMemoryDivision(..) 来调整。多说一句,可以通过调用 GetSystemMemoryDivision(..) 来获得当前 Object Store 的内存使用情况。

 

 

   关于 Storage Memory Program Memory 的调整,主要还是看系统的需求,一般情况下 Storage Memory 不需要太大,可以根据自己的需要适当的调整。但是要注意,两部分内存都不能调整的太小,调整的太小会导致数据丢失,甚至是死机,到时候只能重起系统了。

你可能感兴趣的:(wince,驱动开发)