21.7 添加菜单
下面我们通过为画线程序添加菜单,来进一步研究“控制流反转”带来的控制和通信问题。首先,我们提供一个简单的菜单,允许用户改变lines成员变量中所有线的颜色。下面我们添加color_menu菜单及其回调函数:
重复写出这些几乎相同的回调函数和“动作”函数非常乏味。但是,这在概念上比较简单,而且那些在输入方面更加简单的方式也超出了本书的讨论范围。如果你愿意,可以使用lambda表达式代替cb_函数。当一个菜单按钮被按下时,它会将线改为所要求的颜色。
我们需要初始化已经定义的color_menu成员:
这些按钮是动态添加到菜单上的(使用attach()),并且可以根据需要移除和替换它们。Menu::attach()调整按钮的尺寸和位置,并将它们添加到窗口中。这就是这段代码的全部工作,结果如下:
程序运行了一段时间之后,我们发现真正需要的是一个“弹出式”菜单;也就是说,我们不希望把稀有的屏幕空间用在一个菜单上,除非我们正在使用它。因此,我们添加一个“color menu”按钮。当我们按下它的时候,弹出颜色菜单,并且在完成一个选择操作之后,菜单重新隐藏起来,而“color ...
Get C++程序设计:原理与实践(进阶篇)(原书第2版) now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.