2008-10-09 87 views
0

我有一个MFC sdi应用程序,它使用分隔窗口在显示数据的主视图旁边包含树控件。防止视图偷取焦点/设置焦点到视图

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

有没有什么办法在用户点击树形控件后以编程方式将焦点切换回主视图?或者我正在使用CSplitterWnd和2个视图做一些根本性错误?

回答

1

只要有人点击树,您不想让焦点回到其他视图:它会让您的应用程序无法使用。例如它会阻止用户使用键盘在树中导航,因为树永远不会保持焦点足够长。

我真的想让工具栏继续反映第二个视图的状态(我不确定这是个好主意),但您有几个选项。做你的选择。 2想到:

  1. 你的树视图不应该是一个CView。使用一个简单的CTreeCtrl。不是很好,因为它有时会打破文档/视图范例(例如,只要调用UpdateAllViews(),就不会调用更多树的OnUpdate()。

  2. 防止树成为主动视图。要做到这一点: 2.a.当您查看获得焦点(聚焦状态()):

STATIC_DOWNCAST(CFrameWnd的,AfxMainWnd()) - > SetActiveView(pTheOtherView);

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

在所有情况下,欢迎MFC内部的奇妙世界里,潜水到源代码是强制性每日体育;-)

编辑:添加缺少的不是

+1

有人说 - 在MFC中的专业知识来自知道如何解决它! – 2008-10-09 18:33:33