管理 MFC SDI 多视图应用程序上的输入焦点

发布于 2024-07-30 11:35:19 字数 489 浏览 2 评论 0原文

我们有一个相对较大的 MFC 应用程序,它使用 SDI 来托管许多动态创建的基于 CView 的视图。 该应用程序的基本结构有点像 Outlook(左侧为树视图,右侧为动态视图)。

我一直对处理应用程序中焦点变化的正确方法感到困惑。 例如,我希望能够在焦点位于树视图(左视图)时点击“选项卡”,并将焦点移动到右视图。 虽然我可以捕获树 ctrl 中的 tab 键并手动更改为适当的视图,但我们有很多不同的视图类型(一些基于 CFormView),以及很多分割器控件,我不确定是否有更通用的的方式来处理它。

我知道在 CDialog- 或 CFormView- 中设置焦点很容易(只需使用 Visual Studio 中的内置 Tab 键顺序管理器),但托管多个视图类型和分隔栏等的应用程序要复杂得多。 例如,如果焦点当前位于表单视图中,当我按 Tab 切换到表单视图 Tab 键顺序的末尾时,如何检测到需要将输入焦点更改为另一个(动态)视图?

干杯并感谢大家。

达伦.

We have a relatively large MFC application that uses an SDI to host a number of dynamically created CView- based views. The basic structure of the application is somewhat like Outlook (tree view on the left, dynamic view(s) on the right).

I've been puzzling over the correct way to handle focus changing in the app. For example, I'd like to be able to hit 'tab' whilst the focus is in the tree view (left view), and move the focus to the right view. Whilst I could capture the tab key in the tree ctrl and manually change to the appropriate view, we have a lot of different view types (some CFormView- based), and a lot of splitter controls and I'm unsure whether there a more generic way to handle it.

I know setting the focus in a CDialog- or CFormView- is easy (just using the built-in tab order manager in Visual Studio), but an application which hosts multiple view types and splitter bars etc. is far more complex. For example, if the focus is currently in a form-view, when I tab over the end of the form view tab order, how do I detect that I need to change the input focus to another (dynamic) view?

Cheers and thanks all.

Darren.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笑忘罢 2024-08-06 11:35:19

一个显而易见的答案是简化用户界面本身。

另一种方法是仅在视图内“选项卡”并要求用户使用鼠标从一个视图切换到另一个视图; 或者,您可以创建一个视图菜单项,并让用户通过进行菜单选择来选择视图(可以使用键盘,例如,通过按 Alt-V-1 选择视图 1)。

最后的选择就是您自己提到的:检测 Tab 键并自己处理所有事情。

One obvious answer would be to simplify the UI itself.

Another is to just 'tab' inside a view and require the user to use mouse to switch from one view to another; alternatively, you can create a view menu item and let the user choose the view by making a menu selection (keyboard could be used, e.g., to choose view 1 by pressing Alt-V-1).

The final option would be what you have mentioned yourself: detect Tab key and handle everything yourself.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文