请问S60下CEikEdwin如何显示边框

toann 2006-03-15 06:06:57
如题,期待答复^_^
...全文
406 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
toann 2006-03-21
  • 打赏
  • 举报
回复
同样感谢Ordie(ordie)^_^
Ordie 2006-03-20
  • 打赏
  • 举报
回复
这个问题我也折腾了一阵子,到现在也没有完美的解决办法,不知道symbian是怎么设计的,给控件加个边框都这么麻烦。现在想到的办法有两个:

1 在编辑控件所在的container类的draw中画边框,这个是万能的方法,所谓万能就是
这种方法其实和控件根本没关系,所以不论什么控件都可以用这种方法,不过个人
觉得比较土。

2 自己写一个类继承CEikEdwin,重写它的虚函数draw,但我这么写的时候发现,在自己
的draw函数中,必须先调用父类的draw,然后再画自己的边框才能显示,如果不调父类
的draw,那么画边框的代码似乎就不起作用!?而且调用父类的draw必须在函数的开头,
而不能先画自己的边框,再调父类的draw。你自己可以试一试,但这种方法不是对所有
editor控件都好用,比如密码输入控件CEikSecretEditor这招就不灵。但其实
CEikSecretEditor这个控件本身就有边框,根本不用自己画,而且可以通过SetBorder
设置边框风格,可是匪夷所思的是,CEikEdwin用SetBorder就没用,也不知道是怎么回事。

个人觉得既然都是CEik打头的控件,对于SetBorder应该有一致的行为,即便SetBorder
不是所有的地方都好用,也应该提供用户重写draw函数的机会,但关键是行为要一致。
我觉得微软在这方面做得就比较好。不过也可能是我的用法不当,所以才画不出来吧,
不知道大家怎么想。
chenziteng 2006-03-20
  • 打赏
  • 举报
回复
S60中的CEikEdwin::SetBorder()的确不起作用,这不是Symbian的错,是Nokia的错。

土就土吧,能用得了:)
chenziteng 2006-03-16
  • 打赏
  • 举报
回复
上面的代码在SDK 1.2下有效,高版本的SDK里edwin似乎大了,画的时候也应该把border扩大一点儿:

void CMyContainer::Draw(const TRect& aRect) const
{
CWindowGc& gc = SystemGc();
TRect rect(iEdwin->Rect());
rect.Shrink(-1, -1);
gc.DrawRect(rect);
}
toann 2006-03-16
  • 打赏
  • 举报
回复
十分感谢子腾大哥不厌其烦的回复我的邮件,我是想给一个白色的Editor加一个黑色的边^_^
toann 2006-03-16
  • 打赏
  • 举报
回复
唉,感叹子腾大哥的耐心啊!!结帖加分^_^
chenziteng 2006-03-15
  • 打赏
  • 举报
回复
只能自己画。

示例:

void CMyContainer::Draw(const TRect& aRect) const
{
CWindowGc& gc = SystemGc();
gc.DrawRect(iEdwin->Rect());
}

3,119

社区成员

发帖
与我相关
我的任务
社区描述
塞班系统(Symbian系统)是塞班公司为手机而设计的操作系统,它的前身是英国宝意昂公司的 EP ( Electronic Piece of cheese)操作系统。
社区管理员
  • Symbian社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧