在MFC中集成RAD .NET框架

http://tech.ddvip.com   2007年06月21日    社区交流

内容摘要:关于是MFC还是.NET的讨论时隐时现,不绝于耳。CLR是个充满魅力的世界,这种魅力,使得C#、VB.NET等变得光彩夺目。然而,MFC并没有衰老,如果你深入的了解MFC,你会发现,MFC完全可以与C#、VB.NET争奇斗艳……

  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,代码如下:

来源:microsoft    作者:孙辉    责编:豆豆技术应用

正在加载评论...