WEB开发网
开发学院手机开发Windows Mobile 开发 Windows Mobile SP/PPC 中 Menu Bar 使用完美方案... 阅读

Windows Mobile SP/PPC 中 Menu Bar 使用完美方案

 2010-08-22 12:53:00 来源:WEB开发网   
核心提示:在SP/PPC写过MenuBar代码的人可能都知道,AygShell 中 Menu Bar 的设计真是无话说,Windows Mobile SP/PPC 中 Menu Bar 使用完美方案,各种系统(SP、PPC、2003、5.0)功能差异不一致,导致编程特别不方便,无视 ,基于以上几个规则,比如 SP2003 中不能

在SP/PPC写过MenuBar代码的人可能都知道,AygShell 中 Menu Bar 的设计真是无话说,各种系统(SP、PPC、2003、5.0)功能差异不一致,导致编程特别不方便。比如 SP2003 中不能使用 SHCMBF_HMENU 标记,PPC 5.0/6.0 终不能使用 SHCMBM_GETMENU,SP/PPC 2003中不能使用 TBIF_BYINDEX 来操作按钮,等等。

在别扭与愤懑中,用着MenuBar都过了4年了。终于整理出了一套相对比较完美的方案。先做一些假定:

1. 如果我们的代码用 SP2003 SDK 编译,则必须支持 SP/PPC 2003/5 (这里5.0的意思包含5.0和之后的版本,因为5以后都比较完美统一)。

2. 用 PPC2003 SDK 编译的话,必须要支持 PPC 2003/5.0。

3. 用 SP5 SDK编译的话,支持SP5/PPC5。

4. 用 PPC 5 编译的话,只支持 PPC5。

基于以下假定,我整理了一个小的CeleMenuBar类,在使用的时候,只要:

1. 在资源中定义 IDC_LSK 和 IDC_RSK (=IDC_LSK+1),用于定义左右按钮的命令ID。

2. 在资源中添加一个菜单,如果不是Popup按钮,则用 IDC_LSK 或 IDC_RSK作为命令。

3. 如果你的代码需要支持 2003,则请在资源中定义 MenuBar 的 RCDATA;如果只需要支持5.0,则不需要。

4. 在代码中,使用 CeleMenuBar,操作所有的MenuBar按钮都不用管命令ID,只需要指明是左按钮还是右按钮。

5. 在代码中,如果需要响应按钮命令,请使用 IDC_LSK 和 IDC_RSK;如果是弹出菜单,无视 。

基于以上几个规则,代码写起来就简单多了。

// CeleMenuBar

#ifndef IDC_LSK

#ifndef TBIF_BYINDEX

#pragma message("CeleMenuBar: IDC_LSK is not defined. You should use IDOK & IDCANCEL as soft key command.")

#endif

#define IDC_LSK IDOK

#define IDC_RSK IDCANCEL

#endif

#if TBIF_BYINDEX

#define _MBIF(x) ((x) | TBIF_BYINDEX)

#define _MBID(x) (x)

#else

#define _MBIF(x) (x)

#define _MBID(x) (IDC_LSK + (x))

#endif

class CeleMenuBar

{

protected:

HWND m_hMenuBar;

public:

CeleMenuBar(HWND hMenuBar = NULL)

1 2 3  下一页

Tags:Windows Mobile SP

编辑录入:coldstar [复制链接] [打 印]
赞助商链接