您的位置:首页 > 产品设计 > UI/UE

set link for CAknMessageQueryDialog

2010-11-18 17:04 405 查看
要给CAknMessageQueryDialog 加两个link, 一个是Url的, 一个是MailBox的

这就有一个问题, 直接用CAknMessageQueryDialog的Setlink功能的时候, 不管你是哪种type, 只要聚焦到link上面的时候总会是view的softkey

正常情况下, 我们需要在link是在mailbox的时候菜单显示成"Mailo" or something.

这个情况下, 以前的功能就不够用了

尝试着访问CAknMessageQueryControl, 但是能用的几个函数都没有IMPORT出来

所以还是只能从UI下手

首先, 得检验当前的focus是不是在link上面

control里面有一个IsHighLighted, 但是用不了(呵呵, 废话), 所以用笨办法

监控按键事件, 然后在里面判断当前的cba里面有没有CAknSoftKeyView, 有的话说明当前肯定是聚焦的

好了, 第一部分的任务解决了, 下面的重点 怎么样确定当前的type是哪种类型的呢

分三步走:

1。 在setlink 和setcallback的时候把type 带进去:

struct LinkStr

{

CFindItemEngine::TFindItemSearchCase iLinkType;

TBuf<KMaxServerNameLength> iLinkText;

};

2。定义一个静态变量来保存当前的typa值:

static CFindItemEngine::TFindItemSearchCase iCurrentType;

3。 当每次检测出当前focus的时候, 调用一下callback, 这个是用:

ProcessCommandL(EAknSoftkeyView);

然后在callback中获得当前的type值

TInt HandleLinkL( TAny* aPtr )

{

LinkStr * aLink = (LinkStr *)aPtr;

iCurrentType = aLink->iLinkType;

return 0;

}

4。 得到这个值以后, cba->SetCommandL(EAknSoftkeyView, _L("MailTo"));

好了, 大概步骤就是这么多了

看得很纠结阿
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐