我们有一个MFC ActiveX控件,在Visual Studio 2012中创建,具有CLR支持,通过类型为CWinFormsControl<T>
的成员变量承载.NET UserControl。在创建MFC ActiveX控件时,创建并扩展CWinFormsControl
以涵盖整个ActiveX控件。
除了TAB键之外,所有容器(包括我的VB6测试表单)都能很好地工作。 Tab键导航到每个项目,直到遇到我的ActiveX控件,此时焦点完全丢失,TAB键变得无用。必须使用鼠标进行恢复。
最终发现
BOOL CMyCtrl::PreTranslateMessage(MSG* pMsg)
{
if (IsDialogMessage(pMsg))
{
return TRUE;
}
return COleControl::PreTranslateMessage(pMsg);
}
MFC ActiveX控件中的似乎专注于.NET UserControl。但是,一旦进入.NET UserControl,焦点就会不断地在.NET UserControl的项目之间循环,永远不会离开。用户必须使用鼠标离开ActiveX / .NET控件,返回到应用程序的其余部分。
PreTranslateMessage
是正确的做法吗?关于如何处理来自CWinFormsControl<T>
对象的TAB的任何想法?
问候,
安德鲁