防止视图窃取焦点/设置焦点到视图

时间:2008-10-09 17:49:15

标签: c++ windows mfc

我有一个MFC sdi应用程序,它使用拆分器窗口在显示数据的主视图旁边包含树控件。

当用户在树中选择某些内容时,该视图将保持焦点,直到用户故意点击主数据窗口。这意味着禁用与主视图关联的任何工具栏按钮。

用户单击树控件后,有没有办法以编程方式将焦点切换回主视图?或者我使用CSplitterWnd和2个视图做了一些根本错误的事情?

1 个答案:

答案 0 :(得分:1)

一旦有人点击树,您就不希望将焦点带回另一个视图:这会使您的应用无法使用。例如它会阻止用户使用键盘在树中导航,因为树永远不会保持焦点足够长。

我真的希望工具栏能够反映第二个视图的状态(我不确定这是个好主意),你有几个选择。随便挑选。 2脑海中浮现:

  1. 您的树视图不应该是CView。使用简单的CTreeCtrl。不是很好,因为它破坏了doc / view范例(例如,无论何时调用UpdateAllViews(),都不再调用树的OnUpdate()。

  2. 防止树成为活动视图。为此: 2.A.当您查看获得焦点时(OnFocus()):

  3. STATIC_DOWNCAST(CFrameWnd,AfxMainWnd()) - > SetActiveView(pTheOtherView);

    2.b中。从CSplitterWnd派生CMySplitterWnd类,然后覆盖CMySplitterWnd :: SetActivePane()以防止它将树视图设置为活动视图。

    在所有情况下,欢迎来到MFC内部的精彩世界,其中潜入源代码是强制性的日常运动; - )

    编辑:添加缺少NOT