程序界面多模式显示

感性的有点颓

感性的有点颓

2016-01-29 12:09

程序界面多模式显示,程序界面多模式显示

程序界面多模式显示

作者:赖锋

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/cyuyanjiaocheng/)

下载源代码

  看过徐景周写过的一篇“程序界面多模式显示的实现”,在一个应用程序中使程序拥有多种显示模式,但是这个界面是由SDI的MFC文档视图结构实现,但是使用的代码在MDI的多文档/视图中不能实现,通过MSDN我找到了一些实现 MDI 的多模式实现方法,不敢独享,与大家分享。
  利用SDI和MDI实现这种多模式的显示的应用程序,第一步首先要实现的是可以动态加载和销毁菜单。对于SDI的应用程序,实现是比较简单的,对于MDI的应用程序,实现则是有些麻烦,不过,这些都是可以做到的!呵,呵!
  首先,要将SDI和MDI的AppWizard产生的菜单销毁,一开始就不要产生菜单!看过《深入浅出MFC》了吗!在 PreCreateWindow 函数中将菜单资源销毁,另外要注意的地方就是不可以删除资源中ID为 IDR_MAINFRAME 的菜单资源,这个很重要,否则会产生很多 MFC 的断言错误:

// 对于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 csreturn 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 csreturn TRUE;}
  以上的代码分别实现了SDI和MDI一开始的销毁了菜单资源!这样就可以为SDI和MDI的多模式显示作好了准备!利用 SetMenu 这 API就可以实现动态加载菜单,呵,是不是很简单!剩下的就是参考徐景周的代码就行了。


多文档显示的正常模式


多文档显示的简单模式(单文档与此相同)


多文档显示的简洁模式(单文档与此相同)

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/cyuyanjiaocheng/)

展开更多 50%)
分享

猜你喜欢

程序界面多模式显示

C语言教程 C语言函数
程序界面多模式显示

VC程序界面多模式显示

编程语言 网络编程
VC程序界面多模式显示

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

程序界面多模式显示的实现

C语言教程 C语言函数
程序界面多模式显示的实现

Windows 8多显示器模式详解

windows系统 显示器
Windows 8多显示器模式详解

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

一个多文档界面的应用程序

电脑网络
一个多文档界面的应用程序

Windows 8如何分屏显示两个Metro程序界面?

电脑入门
Windows 8如何分屏显示两个Metro程序界面?

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Java 中对文件的读写操作之比较

Java 中对文件的读写操作之比较

《天天酷跑》蹦鸟传说解析

《天天酷跑》蹦鸟传说解析
下拉加载更多内容 ↓