正文

[z]DLL封装框架视图经验总结二2011-01-15 15:05:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/lym51/52175.html

分享到:

现在说说如何外部调用。新建一个调用该DLL 的单文档工程Ower ,现在Ower 工程,在框架类 CMainFrame 类定义一个CCustomManage2 类的私有变量: view plaincopy to clipboardprint? private:       CCustomManage2 m_CustomManage2;   private: CCustomManage2 m_CustomManage2; 然后新建一个菜单项,在菜单项的命令响应函数里弹出新建窗口,具体代码如下: void CMainFrame::OnTest2() { // TODO: 在此添加命令处理程序代码 m_CustomManage2.CreateDocTemple(); } Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4   下面谈谈如何销毁窗口防止内存泄露。这时我们需要考虑用户是怎么关闭新建窗口,用户就是要么是单击调用程序的关闭按钮把两个窗口都关闭;要么单击DLL 弹出的新建窗口的关闭按钮。用户先关新建窗口,再关闭调用程序,这个是没有内存泄露的。但是如果用户一下关闭应用程序(就是同时关闭两个窗口),就会出现内存泄露。为此我们需要重写 CMainFrame 类的WM_CLOSE 消息:        void CMainFrame::OnClose() { // TODO: 在此添加消息处理程序代码和/或调用默认值 // 获取框架窗口指针 CCustomFrameWnd2 * pFrameWnd = m_CustomManage2.GetFrameWnd(); // 如果新建DLL窗口还存在,在确保窗口句柄有效的情况下发送关闭消息关闭它 if (NULL!=pFrameWnd) { HWND hWnd = NULL; hWnd = pFrameWnd->GetSafeHwnd(); if(::IsWindow(hWnd)) pFrameWnd->SendMessage(WM_CLOSE,NULL,NULL); } CFrameWnd::OnClose(); }  这样就可以确保内存没有泄露。效果图如下:            上面可以看作是在DLL 封装了一个单文档程序。从这个角度看,这种方式比动态新建窗口看起来更为自然一下。另外举一反三,可以封装MDI 程序,只须将上面的自定义的文档模板类派生自CMultiDocTemplate 。有兴趣的朋友可以去做一下。         使用DLL 封装框架视图的意义在哪里呢?其实是可以应对更多样的需求,很多时候仅仅是对话框并不满足需求,比如图像处理软件中往往是多视图的,当然也可以在对话框绘图,但感觉不如在视图类画图方便,对话框没有大小化窗口的按钮,这也是一个缺点。在一个大系统里,使用DLL 封装框架视图可以很方便地将多个业务逻辑划分为多个模块,开发起来更为方便。 Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4  

阅读(5854) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册