如何在系统菜单中添加一个自己的菜单项

CSDN地址: http://topic.csdn.net/u/20080722/18/8517e419-7788-4d1c-9029-7a806f5da46c.html

全文:

如题,目前我要做的就是在系统菜单中添加一个自己的菜单项(比如是“联系人”这个界面,右下脚的“菜单”),并响应自己要实现的功能。分不够的我可以另外开帖给你加上。谢谢~~~~~
回复次数: 33

 

  • ciahi用户头像
  • ciahi
  • (爪哇乞丐)
  • 等 级:
#1楼 得分:0 回复于:2008-07-22 20:41:53
AppendMenu不行吗?
#2楼 得分:0 回复于:2008-07-22 22:15:23
谢谢楼上的,不过应该没有这么简单吧,我指的菜单是系统对话框,而不是自己程序的对话框,比如系统有个对话框叫"联系人",该窗口有它自己的菜单项.目前大概方向是修改注册表,但是一直没发现相关的主键,请有做过的达人指教。
#3楼 得分:50 回复于:2008-07-22 23:54:46
下面这篇文章里包括了所有你要的东西 
http://msdn.microsoft.com/en-us/library/bb158572.aspx

当弹出菜单时会发送WM_INITMENUPOPUP消息,拿到菜单句柄就可以添加删除
#4楼 得分:0 回复于:2008-07-23 08:49:38
谢谢楼上的,可以留下msn吗
#5楼 得分:0 回复于:2008-07-23 08:59:20
SDK例子里有ctxmenu,实质是一个com组件,添加到注册表里联系人启动的时候调用com组件
#6楼 得分:0 回复于:2008-07-23 09:20:02
不是很明白楼上的意思,这个com组件是系统自带吗?
具体怎么实现的呢
#7楼 得分:0 回复于:2008-07-23 16:28:13
有些进展了,不过有个问题,发现在QueryContextMenu这函数中pIdo->GetData(&fe, &sm)这个函数失败了,GetLastError居然是120(这个系统不支持该功能).
#8楼 得分:0 回复于:2008-07-23 19:51:36
自己顶
#9楼 得分:0 回复于:2008-07-23 21:57:34
引用 3 楼 btsy2000 的回复:
下面这篇文章里包括了所有你要的东西
http://msdn.microsoft.com/en-us/library/bb158572.aspx

当弹出菜单时会发送WM_INITMENUPOPUP消息,拿到菜单句柄就可以添加删除


如果我要在Start->Messaging界面的右键菜单加一个菜单项,与之相关的class和Context是哪个?
微软有公布吗?
#10楼 得分:0 回复于:2008-07-24 09:20:56
wuminxss ,应该是 context:Inbox,class就看具体哪个界面了
#11楼 得分:0 回复于:2008-07-24 09:33:35
d
#12楼 得分:0 回复于:2008-07-24 10:57:44
在添加菜单项时,为什么要加DelayLoad这个dword键值呢?如果设置为1,菜单响应时,不会调用到 自己定义的COM组件的QueryContextMenu函数,而且菜单直接显示的菜单项名称是注册表中默认的字串名。如果设置为0,在COM组件的 QueryContextMenu函数里,有个pIdo->GetData(&fe, &sm)函数,会失败,有人知道为什么吗?是不是我注册表中少了什么项?
#13楼 得分:50 回复于:2008-07-24 11:36:53
要使用IContextMenu这个接口。。。
可以参照一下这个例子,它在TMAIL里右下角的menu添加了两条选项
/Program Files/Windows Mobile 6 SDK/Samples/Common/CPP/Win32/InboxMenuExtensibility/
Contacts也是支持这个接口的
#14楼 得分:0 回复于:2008-07-24 16:35:54
谢谢楼上.
还有个问题,在QueryContextMenu时如果同时insertmenu 2个菜单项,
InsertMenu ( hmenu, indexMenu, MF_BYPOSITION|MF_STRING , idCmdFirst, _T("Menu Test 1") ); 
InsertMenu ( hmenu, indexMenu, MF_BYPOSITION|MF_STRING , idCmdFirst, _T("Menu Test 2") ); 
在InvokeCommand中如何区分菜单,如何区分这两个菜单项?LPCMINVOKECOMMANDINFO pici->lpVerb是一个很大的数,并不是 0, 或者1
#15楼 得分:0 回复于:2008-07-24 16:51:51
lpVerb 
A 32-bit value containing the command being invoked, expressed as either a string (for programmatic invocation), or a menu-identifier offset (for user invocation). 

When containing a string, the HIWORD is non-zero. In this case, lpVerb contains the address of a null-terminated string specifying the language-independent name of the command. The system provides predefined constant values for some command strings. For details, see the table below. 

When containing a menu-identifier offset, the HIWORD is zero. In this case, lpVerb contains a menu-identifier offset of the command in the LOWORD. The shell specifies this value using MAKEINTRESOURCE(idOffset). For details, see "User Interface Services" in the Windows CE .NET 4.2 documentation. 
#16楼 得分:0 回复于:2008-07-24 16:54:55
http://msdn.microsoft.com/en-us/library/bb773215(VS.85).aspx
#17楼 得分:0 回复于:2008-07-24 16:58:47
(LPCTSTR)lpici->lpVerb
是你menu上显示的字符串的地址
#18楼 得分:0 回复于:2008-07-24 17:32:59
非常感 ren22342411 :),果然是高手啊,方便留下联系方式吗?
向你学习!
呵呵
#19楼 得分:0 回复于:2008-07-24 18:49:18
但是我读出来显示是乱码,并不是菜单名,晕
#20楼 得分:0 回复于:2008-07-24 19:05:35
是空的
#21楼 得分:0 回复于:2008-07-24 19:43:44
好好检查一下。。
QueryContextMenu(HMENU hmenu,UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)

InsertMenu ( hmenu, indexMenu, MF_BYPOSITION ¦MF_STRING , idCmdFirst, _T("Menu Test 1") ); 
InsertMenu ( hmenu, indexMenu, MF_BYPOSITION ¦MF_STRING , idCmdFirst, _T("Menu Test 2") ); 
为什么两个Menu的ID是相同的?
他们的范围应该在idCmdFirst 和 idCmdLast 之间
还有你现在是不是menu已经扩展出来,只是没有执行么?
#22楼 得分:0 回复于:2008-07-25 10:36:09
lz我知道你的问题了...你还没有实现接口IContextMenu中
GetCommandString(UINT_PTR idCmd,UINT uType, UINT* pwReserved, LPSTR pszName, UINT cchMax)
这个方法...
这个方法的作用是把menu的ID和其字符串对应起来的
#23楼 得分:0 回复于:2008-07-25 10:46:55
啊,强,我没有对这个函数进行操作,我修改试试
#24楼 得分:0 回复于:2008-07-25 11:00:47
好好看一下那个例子。。。
我邮箱rr.tj.sse@gmail.com
有问题大家可以一起讨论 :)
#25楼 得分:0 回复于:2008-07-25 11:01:42
谢谢:)
#26楼 得分:0 回复于:2008-07-25 11:47:38
搞定了,谢谢,菜单问题差不多了,现在有个关键的问题,比如现在我在联系人添加了个自己的菜单,在菜单响应怎么获得目前联系人的信息呢,比如名称,电话等
#27楼 得分:0 回复于:2008-07-25 11:58:08
这个可能需要用到POOM方面的东西
需要使用IItem接口了,可能还有
IPimSrcContactListIcon 联系人的图标
IPimSrcContactNew 创建一个联系人
IPimSrcContactSummaryCard 点击一个联系人
IPimSrcContactEdit 编辑
这些接口。。没有深入研究过
可以参照下面这个例子:
/Program Files/Windows Mobile 6 SDK/Samples/PocketPC/CPP/win32/PimExProvider

主要还是好好研究POOM
#28楼 得分:0 回复于:2008-07-25 14:11:23
联系人这个com有用过,现在问题在于,比如现在点桌面右下角的联系人,进入联系人界面,而且我的菜单已经嵌 入联系人菜单中。比如联系人有3个联系人,"张三","李四","王五",然后我选择"李四"这个联系人,弹出菜单,这时候我的菜单处理函数要如何获得我 当前选择的是"李四"呢?
#29楼 得分:0 回复于:2008-07-26 11:13:04
#30楼 得分:0 回复于:2008-07-29 10:43:55
终于解决了,其实获取当前联系人index的代码在ctxmenu例子中是有的,IDataObject去获 取指针进行操作,只是没有对特定联系人进行操作,如果要获取联系人的指针,formatEtc.cfFormat = RegisterClipboardFormat(CFNAME_ITEMREFARRAY); 这个参数必须这样设置。http://msdn.microsoft.com/en-us/library/ms879952.aspx上的菜单view 有关联系人的Clipboard format的介绍。

好了,结帖了,非常感谢关注这个帖子的朋友们。特别感谢btsy2000 提供了研究方向,还有ren22342411 ,在菜单问题上的帮助。希望可以和大家一起研究mobile。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值