我想从CDocument派生类更新功能区,因为与功能区状态相关的信息存储在那里。它由向导创建并在资源管理器中编辑
可以使用ON_UPDATE_COMMAND_UI宏更新某些元素(按钮,复选框)。
但我很头疼更新其他东西,如CMFCRibbonComboBox或CMFCRibbonProgressBar,因为CCmdUI没有提供合适的功能来处理它们(即AddItem)
使用GetDlgItem的其他选项不起作用,因为CDocument和RibbonBar元素都不是从CWnd派生的。
那么更新CMFCRibbonComboBox和其他人的方法是什么?
答案 0 :(得分:0)
我在工具栏上遇到了与组合框类似的问题。组合框用于在移动鼠标时显示“世界坐标”空间中某点的当前鼠标坐标。我为组合派生了自己的类,并公开了一些可以更新其内容的方法。然后,我在代码中选择了最合适的点来对这些方法进行适当的调用。这可能是在绘画周期(例如OnDraw)期间,或者在空闲时间期间。导出和公开方法的类似方法应该适合您。唯一需要注意的是选择正确的位置来注入您的呼叫以执行更新。
答案 1 :(得分:0)
我首先尝试了RogerRowland的解决方案,但很快就为每个小事件添加一个函数到MainFrame,然后从文档中调用AfxGetMainWnd()并在其上应用static_cast。
相反,我现在将指针存储到ProgressBar和文档中的组合框。我将方法添加到CMainFrame中以获取它们并删除其余的。
唯一的缺点是文档是在主窗口之前构建的。所以我必须推迟上述指针的初始化。我通过将setRibbonBarPointers()添加到文档并从视图的OnInitialUpdate()调用它来解决它