将FormView视图封装到DLL中

  

在多文档编程框架中,要显示多个视图,如何将视图类封装到DLL中?运行时将其创建此视图,并嵌入到到主框架中,以此实现模块编程呢?步骤如下:

(1)创建一个MFC的扩展DLL工程,在资源中添加一个FormView窗口,并创建相应的类CDeviceManageView。添加导出函数如下:

在stdafx.h文件中定义全局变量//全局变量   extern  CWnd  *, g_pParentWnd ,,;   extern  BOOL ,, g_bIsCloseView ;//在dllmain.cpp中声明   时间=CWnd  *, g_pParentWnd 零;   BOOL ,, g_bIsCloseView =,假;      extern “C", AFX_EXT_API  UINT 创建(CRuntimeClass  *, *,看来,CWnd  *, p)   {   ,,,,,,,new  CDynLinkLibrary (Scale3DCDeviceManageDLL);   时间=g_pParentWnd  p;   * view =, RUNTIME_CLASS (CScale3DCDeviceManageView);   时间=g_bIsCloseView 真实;   返回(0);   }      extern “C",, AFX_EXT_API , BOOL , GetVisual ()   {//视图是否可见   return  g_bIsCloseView;   }

(2)主框架中调用DLL函数创建视图

HINSTANCE  hDllInst =, AfxLoadLibrary (CScale3DCGlobal: GetApplicationPath (),   ,,,,,,,,,,,,,,,,,,,,+,_T (“\ \ DeviceManage.DLL"));   if  (hDllInst)   {   typedef 使用UINT (* MYFUNC) (CRuntimeClass * *, CWnd  *父);   MYFUNC  CreateViewUI =,空;   CreateViewUI =, (MYFUNC) GetProcAddress (hDllInst,“Create");   if  (CreateViewUI)   {   CRuntimeClass *, pNewViewClass;   CreateViewUI(及pNewViewClass AfxGetMainWnd ());   断言(pNewViewClass);      CCreateContext 语境;   时间=context.m_pNewViewClass  pNewViewClass;   时间=pChildFrame  new  CScale3DCChildFrame;//测试工程中的子框架窗口   if  (! pChildFrame→LoadFrame(32000//与DLL中的资源ID一致   | WS_OVERLAPPEDWINDOW  FWS_PREFIXTITLE, AfxGetMainWnd(),,,上下文))   返回;   pChildFrame→SetWindowText (_T(“通信连接“));   pChildFrame→InitialUpdateFrame(零,,真的);   }//FreeLibrary (hDllInst);   }   }

编译器相关设置,如下:
将FormView视图封装到DLL中

将FormView视图封装到DLL中

将FormView视图封装到DLL中

(2)设置视图的标签页标题

# include  & lt; afxMDIChildWndEx.h>   void  CScale3DCScaleWeightView:: OnInitialUpdate ()   {   CFormView: OnInitialUpdate ();   CMDIChildWndEx  *, pFrame =, (CMDIChildWndEx *)→GetParentFrame ();//CScale3DCChildFrame  *, pMidFrame =, (CScale3DCChildFrame *) pFrame;      pFrame→SetWindowText (_T(“称重数据区“));//TODO:祝福;在此添加专用代码和/或调用基类   }

(3)设置视图窗口的背景颜色

BOOL  CScale3DCScaleWeightView: OnEraseBkgnd (CDC *, pDC)   {//TODO:祝福;在此添加消息处理程序代码和/或调用默认值   CRect ,, rt;   GetClientRect(及rt);   CBrush ,,刷;   brush.CreateSolidBrush (RGB (224,, 241,, 251));   CBrush  *, pOldBrush =, pDC→SelectObject(及刷);   pDC→FillRect(及rt,,,刷);      pDC→SelectObject (pOldBrush);      return 真实;//return  CFormView: OnEraseBkgnd (pDC);   }
 void  CScale3DCUserManageView: OnNcDestroy ()
  {
  CFormView: OnNcDestroy ();
  时间=g_bIsCloseView 假;//TODO:祝福;在此处添加消息处理程序代码
  }

(5)为DLL中的视图窗口,设置唯一的ID(即相对于所有的DLL包含的视图)。

(6)控件产生提示

. h文件中添加提示控件   CToolTipCtrl , m_tip;   void  CScale3DCWeightView:: OnInitialUpdate ()   {   CFormView: OnInitialUpdate ();   ,m_tip.Create(这个);   ,m_tip.AddTool (GetDlgItem (IDC_ADD_SCALE), _T(“称重界面“));   }      BOOL  CScale3DCDeviceManageView: PreTranslateMessage(味精*,pMsg)   {//TODO:祝福;在此添加专用代码和/或调用基类   if  (pMsg→message ==, WM_MOUSEMOVE)   m_Mytip.RelayEvent (pMsg);      return  CFormView: PreTranslateMessage (pMsg);   }

将FormView视图封装到DLL中