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 不需要太大,可以根据自己的需要适当的调整。但是要注意,两部分内存都不能调整的太小,调整的太小会导致数据丢失,甚至是死机,到时候只能重起系统了。