程序界面多模式显示

2016-01-29 12:09 1 1 收藏

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

【 tulaoshi.com - C语言心得技巧 】

程序界面多模式显示

作者:赖锋

下载源代码

  看过徐景周写过的一篇“程序界面多模式显示的实现”,在一个应用程序中使程序拥有多种显示模式,但是这个界面是由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://www.tulaoshi.com)


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

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

来源:https://www.tulaoshi.com/n/20160129/1484831.html

延伸阅读
  Windows 可以将多个显示器映射为虚拟桌面,使我们可以利用这一点设计出方便工作的应用程序。例如 PowerPoint 就充分发挥了双显示器的优势(大多数的笔记本电脑都支持),它可以在一个显示器上播放幻灯片,而在另一个显示器上显示备注,可以控制播放的进程,使使用者做商务演说的时候非常等心应手。那么我们怎么开发这种应用程序呢?这篇...
1.插入自定义资源(Custom),将资源类型(Resource Type)设为“24”。 2.将资源ID“IDR_DEFAULT1” 改为“1”。 3.将下列文本复制到该资源的十六进制编辑器中。 ?xml version="1.0" encoding="UTF-8" standalone="yes"? assembly  xmlns="urn:schemas-microsoft-com:asm.v1"  manifestVersion="1.0" assemblyIdentity  &...
让iPhone充电界面显示壁纸 iPhone / iPad在充电时便会自动进入电池的画面。无论用户的桌布是什么都不会在这里显示,只有黑色一片的背景。如果要经常充电的,看到喜欢的桌布时间真的不多。 这次介绍的Cyditulaoshi.coma应用程式就能改变这个设定。 安装了ChargingBackground后,充电画面的背景便会显示桌布。同时依然可以看到电池的...
怎么设置Win7系统双显示器多屏幕模式   1、首先在win7桌面空白处右击鼠标选择屏幕分辨率选项; 2、如果你有安装有两台显示器的话,就会显示下图效果,如果未显示出两台显示器的话,单击检测进行检测,然后点击多显示器后面的按钮框,就可以看到复制这些显示和扩展这些显示两个选项; 1)如果你选择的是复制这些显示,那...
具体的实现方法如下: ①:在你的窗体加入代码。如果是多个窗口,可以将此代码放到模块中。 代码如下: '声明API函数 PrivateDeclareSubInitCommonControlsLib"comctl32.dll"() PrivateSubForm_Initialize() InitCommonControls EndSub 注意:千万不要在Form_load()事件下写InitCommonCon...

经验教程

839

收藏

5
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部