关于Windows菜单的使用和注意事项
创建菜单的两个API
有两个Win32 API可以用来创建菜单:
> CreateMenu
> CreatePopupMenu
CreateMenu会创建一个横向的菜单栏,用来挂接到一个顶层窗口上,我们平常在窗口顶部看到的类似于”文件”, “编辑”等菜单,就是用这个CreateMenu创建的。
CreatePopupMenu和CreateMenu不同,它主要用来创建一个纵向的弹出式菜单,它适用于显示一个上下文菜单或者作为其他菜单(可能是一个横向菜单或者另外一个弹出式菜单)的一个子菜单。
如果你没注意到它们两个之间的区别,你可能会碰到一些比较奇怪的菜单行为。
Windows在某些极少见的情况下会理解开发者的误用并尽最大努力来将错误的调用转为正确的版本,但是,我可不敢把赌注放在这个上。
使用菜单时需要注意的地方
我们没有办法从一个菜单对象中得知它是一个横向还是纵向的。
当一个菜单被销毁后,整个菜单树都会被销毁,也就是说,所有的子菜单,或者子菜单的子菜单,都会被销毁。
当你销毁一个菜单的时候,最好别是其他菜单的子菜单,否则会导致其他菜单的子菜单变为无效状态,进而产生一些难以捉摸的问题。
如果你从父菜单上移除某个子菜单,你就需要负责释放这个子菜单,因为当子菜单被从父菜单上移除时,子菜单无论如何也不会随着父菜单的销毁而自动销毁。
一个菜单可以作为多个菜单的子菜单,这个是虽然是合理的,但是要特别小心,因为如果其中一个父菜单销毁了,它所有的子菜单也会随之销毁,这样,其他父窗口就会持有一个不再有效的子菜单了。
在Windows XP上,菜单嵌套被限制为25层。当然了,以后的新版本出来可能会改变这个值。
在Windows 95上,就没有这个嵌套菜单的数量限制,带来的一个副作用是,有些小伙子可能会创建一个无限循环的菜单嵌套,这样带来的结果是:崩溃会来的非常快。
总结
我个人还是倾向于不再使用横向菜单这个用户界面部件,觉得未来的用户界面应该不会存在这个东西。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《What order do programs in the startup group execute?》
- 下一篇: 搞清楚系列:什么是一个顶级(top-level)窗口
- 上一篇: 接口也是一种合约(严肃脸)
相关推荐
- 优化点:仅当窗口在屏幕上可见时才进行绘制
- Posted on 03月08日
- 关闭模态对话框的正确顺序
- Posted on 12月22日
- 错误信息:The ACME server was probably unable to reach
- Posted on 07月22日
- 小技巧:OneDrive一直显示正在登录
- Posted on 03月28日
评论已关闭。