当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 程序界面多模式显示
| 程序界面多模式显示 下载源代码 看过徐景周写过的一篇“程序界面多模式显示的实现”,在一个应用程序中使程序拥有多种显示模式,但是这个界面是由SDI的MFC文档视图结构实现,但是使用的代码在MDI的多文档/视图中不能实现,通过MSDN我找到了一些实现 MDI 的多模式实现方法,不敢独享,与大家分享 。 // 对于SDI的 PreCreateWindowBOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs){ cs.style &= ~FWS_ADDTOTITLE; cs.style &= ~( WS_SIZEBOX | WS_MINIMIZEBOX | WS_MAXIMIZEBOX ); if ( cs.hMenu != NULL ) { DestroyMenu( cs.hMenu ); cs.hMenu = NULL; } if( ! CFrameWnd::PreCreateWindow( cs ) ) return FALSE; // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return TRUE;} 多文档的开始销毁菜单的方法:首先保留 ID 为 IDR_MAINFRAME 的菜单资源,原因同上面一样。跟着删除菜单MDI子窗口的菜单资源,其ID为 (IDR_xxxTYPE) 的类型.这样做的原因是避免资源泄漏, (哪儿泄漏,我还没有去查,MSDN上是这样的描述) ,在MDI的窗口中,打开子窗口的时候,会发生菜单切换,这些是MFC的代码自动实现的,所以我们现在就是把这些切换菜单的代码去除。 // CMainFrame 中重载 LoadFrame// // virtual BOOL LoadFrame( UINT nIDResource,// DWORD dwDefaultStyle = WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE,// CWnd* pParentWnd = NULL, CCreateContext* pContext = NULL ); BOOL CMainFrame::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle, CWnd* pParentWnd, CCreateContext* pContext) { return CFrameWnd::LoadFrame(nIDResource,dwDefaultStyle, pParentWnd,pContext); } // CMainFrame 中重载 OnCreateClient, 实现禁止菜单切换// virtual BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, // CCreateContext* /*pContext*/); BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* /*pContext*/) { return CreateClient(lpcs,NULL); }// 添加以下代码:BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs){ cs.style &= ~FWS_ADDTOTITLE; cs.style &= ~( WS_SIZEBOX | WS_MINIMIZEBOX | WS_MAXIMIZEBOX ); if ( cs.hMenu != NULL ) { DestroyMenu( cs.hMenu ); cs.hMenu = NULL; } if( ! CFrameWnd::PreCreateWindow( cs ) ) return FALSE; // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return TRUE;} 以上的代码分别实现了SDI和MDI一开始的销毁了菜单资源!这样就可以为SDI和MDI的多模式显示作好了准备!利用 SetMenu 这 API就可以实现动态加载菜单,呵,是不是很简单!剩下的就是参考徐景周的代码就行了。 |
评论 (0) All