MFC滑块+编辑+微调器模式

时间:2017-10-28 01:00:59

标签: c++ windows user-interface mfc

在我控制外部设备的基于对话框的UI中,我有一堆类似的外观和行为“旋钮”:由滑块数字编辑框<组成的三重控件/ strong>,以及该数字编辑框的微调器

值的变化会导致到该外部设备的往返,所以我自然而然地试图在每次“更改”时只调用那个冗长的API。这些变化可以来自3个控制中的任何一个,显然它们必须是同步的。这在实践中意味着如果编辑框改变 - 它需要改变滑块的位置。反之亦然。

API调用在单独的函数中实现,只要UI框架报告值发生更改,就会调用这些函数。

的问题:

  1. 当控件开始相互更新时,“同步”范例的直接天真实现自然会导致递归调用
  2. 介绍一个递归防护(如bool m_processingUserInput;)看起来,坦率地说,感觉非常难看
  3. 在添加更多控件时,从一种控件“仅”进行API调用,而不是另一种控件(仅限滑块)进行API调用。此外,这种方法使得代码看起来非常混乱,并且(本身)也无法解决递归问题
  4. 我的问题是:我在这里错过了一个人们用来编写这种UI交互的完善模式吗?请让我知道一种优雅高效的方法。

1 个答案:

答案 0 :(得分:1)

更改的第一个控件应触发“值更新”事件。其他控件应该订阅该事件并重新绘制其OnUpdate方法中的可视元素。您可以在Windows API之上构建它,或者使用MFC的内置文档视图架构,它基本上是模型 - 视图 - 控制器模式的实现:

https://www.codeproject.com/Articles/30291/An-Introduction-to-a-Model-View-Controller-Impleme