关于Windows菜单的使用和注意事项

关于Windows菜单的使用和注意事项

作者:BlogUpdater |  时间:2020-09-10 |  浏览:459 |  评论已关闭 条评论

创建菜单的两个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?》

评论已关闭。