【问题标题】:MFC Document View Getting Tabbing to workMFC 文档视图让 Tabbing 工作
【发布时间】:2013-08-15 11:40:04
【问题描述】:

我创建了一个 MFC 文档视图应用程序,并添加了几个继承自 CEdit 的类到 CView。我想在每个 CEdit 工作之间切换。我环顾四周,大多数解决方案都涉及将IsDialogMessage() 添加到消息循环或PreTranslateMessage 中。我在CEdit 类的PreTranslateMessage 方法中尝试过这个,如下所示:

BOOL WordControl::PreTranslateMessage(MSG* pMsg)
{
    if(IsDialogMessage(pMsg))
        return TRUE;
    else
        return __super::PreTranslateMessage(pMsg);
}

但是,现在 CEdit 没有收到任何键盘消息并且没有制表符。我创建了这样的CEdit

Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | ES_CENTER , Rect, Parent, Index);

我做错了什么?

编辑:

应用使用基本的 MFC 单文档 模板。我正在动态添加几个继承自CEdit 的对象和几个继承自CStatic 的对象。我已经设法创建了所有CEditsCStatics,但我希望能够从CEdit 切换到CEdit

一张图片胜过千言万语;这是截图:

我希望能够在第一个 CEdit 中输入“你好”,点击标签,然后在下一个 CEdit 中获得焦点。然后我将输入“world”,然后点击 tab,下一个 CEdit 将有焦点让我输入“this”等。

编辑:

新窗口:

【问题讨论】:

  • 有什么理由不从 CEditView 继承?您能否展示一个应用模型来更详细地描述该问题。
  • 我对使用 C++ 和 MFC 还是很陌生,所以说实话我不知道 CEditView。我正在使用 MFC 单文档模板,所以我只是使用它给我的东西。我可以将视图改为从CEditView 继承吗?
  • 当然。它是在您尝试使用的视图之间切换吗?
  • 我尝试根据您的建议将视图更改为从 CEditView 继承,但该应用在启动时给出了调试异常失败。
  • 对于这样的事情,你通常会创建一个基于 CFormView 的视图。然后你会有一个对话框资源,你可以添加编辑,指定标签顺序等。我错过了什么吗?

标签: visual-c++ mfc


【解决方案1】:

使用 CFormView 作为您的基础。您可以动态添加控件,表单将为您管理选项卡。如果您只有少量的最大编辑控件,您也可以在表单上创建它们,然后根据需要显示/隐藏它们。

【讨论】:

  • 您的建议有效!正如您将在我的编辑中看到的那样,会弹出一个新对话框,要求我选择一个选项并单击“确定”。在我做出选择后,主应用程序会加载并且选项卡可以正常工作,谢谢。但我希望应用程序在没有新窗口的情况下像以前一样加载。你能建议如何让应用像以前一样加载吗?
  • 您需要在 CWinApp 类中编辑 InitInstance。如果您只是摆脱了为以前的 CView 创建的 DocTemplate,它应该对其进行排序。
  • 解决了,谢谢。我希望我能给你超过 1 票,非常感谢你的帮助。
猜你喜欢
  • 1970-01-01
  • 2014-10-16
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多