【发布时间】: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 的对象。我已经设法创建了所有CEdits 和CStatics,但我希望能够从CEdit 切换到CEdit。
一张图片胜过千言万语;这是截图:
我希望能够在第一个 CEdit 中输入“你好”,点击标签,然后在下一个 CEdit 中获得焦点。然后我将输入“world”,然后点击 tab,下一个 CEdit 将有焦点让我输入“this”等。
编辑:
新窗口:
【问题讨论】:
-
有什么理由不从 CEditView 继承?您能否展示一个应用模型来更详细地描述该问题。
-
我对使用 C++ 和 MFC 还是很陌生,所以说实话我不知道 CEditView。我正在使用 MFC 单文档模板,所以我只是使用它给我的东西。我可以将视图改为从
CEditView继承吗? -
当然。它是在您尝试使用的视图之间切换吗?
-
我尝试根据您的建议将视图更改为从
CEditView继承,但该应用在启动时给出了调试异常失败。 -
对于这样的事情,你通常会创建一个基于 CFormView 的视图。然后你会有一个对话框资源,你可以添加编辑,指定标签顺序等。我错过了什么吗?
标签: visual-c++ mfc