简化 Windows Mobile 代码维护的编程技巧
2010-03-14 22:12:00 来源:WEB开发网{
case SMARTPHONEV1:
case SMARTPHONEV2:
idd=IDD_SMARTPHONE;
break;
case POCKETPCV1:
case POCKETPCV2:
idd=IDD_POCKETPC;
break;
default:
idd=IDD_HPC;
break;
}
return DialogBox(hInst,MAKEINTRESOURCE(idd),
hWndMain,(DLGPROC)StartDlgMain);
如果您使用资源的 Condition 属性,请在 condition 字段中放入“WIN32_PLATFORM_WFSP”(对于 Smartphone)和“WIN32_PLATFORM_PSPC”(对于 Pocket PC)。请记住 Palm-size PC(Pocket PC 的前身)和最近出现的 Pocket PC 2003 与 Smartphone 有相同的定义,所以如果您想加以区分,您需要创建自己的定义。如果您试图保持二进制文件/可执行文件的平台无关性,您必须对不同平台使用不同资源,但将二者都包含在资源文件中。
四、动态加载 Pocket PC 和 Smartphone 的特定库
如果希望可以使一个二进制文件在两个平台上都能运行,任何时候加载以下 DLL 的其中一个时,请确保使用“LoadLibrary”和“GetProcAddress”,而不是将 DLL 静态链接到应用程序:
? AYGSHELL.DLL (AYGSHELL.LIB/AYGSHELL.h)。包含所有 SIP、SH… 和其他特定于 Pocket PC 的函数。该 DLL 也可用于 Smartphone,但有不同的功能集。
? CELLCORE.DLL (CellCore.LIB/TSP.h and others)。这个 DLL 只存在于 Pocket PC 2002 Phone Edition 和 Smartphone,而不存在于 Pocket PC 2000。它包含了用于连接管理器和进行电话呼叫的所有函数。
在运行时加载这些 DLL 可以让您开发一些智能的错误处理,它仍然允许应用程序在不具备这些库所提供的功能的情况下运行。如果这些库在编译过程中静态链接,则在 Pocket PC 2002 上应用程序甚至不会启动,因为它试图加载这些 DLL 并给出错误“One or more components are missing”。
如果您只想使源代码保持同步,您不需要这样做;而可以将这些库链接到编译过程中。然而要注意,每次在 Pocket PC 2000 和 Pocket PC 2002 编译过程间切换时,都必须手动取出 cellcore.lib。
五、不要假设有触摸屏
Smartphone 没有触摸屏,而 Pocket PC 没有数字键可以点击,但这两种设备都支持 D-pad 的类似于键盘的导航。因此,如果您想保持源代码同步,所有需要导航的用户输入都应该通过 D-pad 导航来实现。Pocket PC 中的菜单是通过触摸屏激活的,而在 Smartphone 中是通过热键激活的。但因为平台会为您处理该输入,所以您不需要为此担心。
更多精彩
赞助商链接