【译】菜单的扩展性 ( 以下内容适用平台 Microsoft Windows CE 5.0 )
日历,任务,联系人应用程序都支持外部程序对其进行菜单项的添加
要注册你的应用程序,你必须在HKEY_LOCAL_MACHINE root 下 创建一个注册键值。此键值应该存在于Software\Microsoft\PimApps
上述例子中的 PIMAPP 应该用 Contacts,Tasks, 或者 Calendar 来替换掉,这取决于你需要修改那个程序的菜单。
键需要两个实体,第一个就是 DLL ,它的名称应该是你 DLL 的名称,第二个是 Menu ,它的制应该你你希望显示在菜单中的菜单项文字。还是那句话
下面的代码例子显示了可能的注册键所需要的两个实体:
DLL\"dialer.dll" Menu\"Dial Contact"
你要注册的 DLL 必须expose 下面的函数,此函数应该在用户选择你的菜单项后被调用。
void CePimCommand (HWND hWnd, PIMTYPE ptData, UINT uDataCount, HANDLE *rghData, void *pReserved);
PIMTYPE 是一个枚举类型,定义如下:
typedef enum tagPIMTYPE {
PT_CALENDAR = 0,
PT_TASKS,
PT_CONTACT } PIMTYPE;
参数 |
解释 |
hWnd |
应用程序窗口句柄 |
ptData |
应用程序调用此函数 |
uDataCount |
rghData 数组中的项目个数 |
*rghData |
当前被选中项目的对象 ID 数组 |
*pReserved |
保留参数,在此版本中为NULL |
你可以从菜单项的对象 ID来操作或者使用这些项目,通过在 Application 对象中调用 GetItemFromOid 。
在msdn上有一篇文章介绍如何加softkey menu,但是其中没有讲如何添加file explorer的softkey menu。文章链接如下:
http://msdn2.microsoft.com/en
下面是关于如何往Contacts中添加一个右软键菜单的例子:
http://msdn2.microsoft.com/en
1 Hook keyboard ,判断如果是联系人列表 弹自己的menu ,至于如果获得用户选择的联系人号码需要一点点技巧
我是这样做的:读联系人列表选择的index 然后读contacts database取用户的mobile phone
2 替换联系人列表的默认menu bar 这个没有玩过
得到联系人的号码后 自己给号码前 增加17951 然后拨号就可以
一个事例 可以参考我的程序 《手机按键精灵》 http://www.spbase.com
替换联系人列表的默认menu bar 这个没有玩过
这个只能是猜测,因为我没有实际做过
取得联系人windows handle SHFindMenubar 得到菜单句柄 然后
这段代码在自己的app可以运行 你可以运用一个简单的技巧 让联系人窗口运行这段代码
HWND hMenuBar = SHFindMenuBar(m_hWnd);
HMENU hPopupMenu = SHGetSubMenu(hMenuBar, ID_WORK);
for(int i=0;i<MENU_COUNT;i++)
RemoveMenu(hPopupMenu, 0, MF_BYPOSITION);
AppendMenu(hPopupMenu, MF_BYPOSITION, ID_IMPORT_ONE_LIST, StringFromResources(IDS_ADD