在MFC中集成RAD .NET框架
2007-06-21 21:36:15 来源:WEB开发网核心提示: NET控件的消息处理一般而言,控件的对话框消息处理是一个极为关键的问题,在MFC中集成RAD .NET框架(5),在网上能找到的MFC中宿主控件的解决方法中,均没有实现.NET控件的对话框消息处理,我们重载了CUserCtrlView的PreTranslateMessage函数:BOOL
NET控件的消息处理
一般而言,控件的对话框消息处理是一个极为关键的问题,在网上能找到的MFC中宿主控件的解决方法中,均没有实现.NET控件的对话框消息处理,一个明显的特征是不能处理“Tab”键消息。为此,我们重载了CUserCtrlView的PreTranslateMessage函数:
BOOL CUserCtrlView::PreTranslateMessage(MSG *pMsg)
{
BOOL bRet = FALSE;
if(m_Control.pUnkControl != NULL)
{
CComQIPtr<IOleInPlaceActiveObject>
spInPlace(m_Control.pUnkControl);
if(spInPlace)
bRet =(S_OK == spInPlace->
TranslateAccelerator(pMsg)) ?
TRUE : FALSE;
}
if(CView::PreTranslateMessage(pMsg))
return TRUE;
CFrameWnd *pFrameWnd = GetTopLevelFrame();
if(pFrameWnd != NULL
&& pFrameWnd->m_bHelpMode)
return FALSE;
// start with first parent frame
pFrameWnd = GetParentFrame();
while(pFrameWnd != NULL)
{
if(pFrameWnd->PreTranslateMessage(pMsg))
return TRUE;
pFrameWnd = pFrameWnd->GetParentFrame();
}
return bRet;
}
这样可以使得CUserCtrlView可以正确的处理.NET Control的对话框消息。
回归RAD世界
接下来我们看看如何在工程中插入一个.NET用户自定义控件。我们增加一个新的托管类testControl,代码如下:
更多精彩
赞助商链接