VC程序界面多模式显示

看过徐景周写过的一篇“程序界面多模式显示的实现”,在一个应用程序中使程序拥有多种显示模式,但是这个界面是由SDI的MFC文档视图结构实现,但是使用的代码在MDI的多文档/视图中不能实现,通过MSDN我找到了一些实现 MDI 的多模式实现方法,不敢独享,与大家分享 。

利用SDI和MDI实现这种多模式的显示的应用程序,第一步首先要实现的是可以动态加载和销毁菜单。对于SDI的应用程序,实现是比较简单的,对于MDI的应用程序,实现则是有些麻烦,不过,这些都是可以做到的!呵,呵!

首先,要将SDI和MDI的AppWizard产生的菜单销毁,一开始就不要产生菜单!看过《深入浅出MFC》了吗!在 PreCreateWindow 函数中将菜单资源销毁 ,另外要注意的地方就是不可以删除资源中ID为 IDR_MAINFRAME 的菜单资源,这个很重要,否则会产生很多 MFC 的断言错误:

// 对于SDI的 PreCreateWindow
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;
}

多文档的开始销毁菜单的方法:

首先保留 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;
}

时间: 2025-01-26 15:30:59

VC程序界面多模式显示的相关文章

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

如果你用过RealPlayer播放器的话,那就一定对它的多模式显示方式不会陌生吧!RealPlayer拥有正常和精简两种显示模式.我们有时也想在自己的程序界面上实现类似的功能,该怎样实现呢?下面拿我用VC6.0做的一个多模式显示程序示例来向大家展示,它是怎样实现类似功能的.如下图所示:(图一) 正常显示模式:(图二)简洁显示模式,无视图:(图三),精简显示模式,仅工具条. 图一 图二 图三 基本构成思想: 实现原理很简单,只要分别获取窗体大小.客户区大小.工具条大小.状态条大小.边框大小以及标题

Android中设置只是程序第一次运行才显示的界面

程序安装后第一次启动: 启动页-->功能介绍页-->系统主页 以后启动: 启动页-->系统 主页 所以在启动页中判断一下就可以了 可以弄一个文件保存一个状态,推荐用SharedPreferences . 1.可以定义一个变量来判断程序是第几次运行,如果是第一次则跳转到引导的Activity,如果不是 第一次则执行系统主页. 判断系统是第一次运行的代码实现如下: 在Activity中添加代码: 使用SharedPreferences来记录程序的使用次数 一下是实现的代码: public v

xml-XML是如何使用的?如何在程序界面上显示类似word里面的文本和图片

问题描述 XML是如何使用的?如何在程序界面上显示类似word里面的文本和图片 老师叫我做一个字典软件,数据用XML存储!如何从程序中去读取XML的内容,那些标签如何过滤识别! 还有TextPanel如何使用!!! 解决方案 xml使用的标签都是自定义的,你获取数据的时候首先要获取到文档对象,再获取头元素,再获取子元素,一直下去带内容

程序启动后,不在最前面显示,任务栏也没有,只有关掉前面窗口,才能看到程序界面,这时任务栏才有。

问题描述 我用了多线程技术用于下载和显示众多的图片.但当我启动程序时,程序在前面闪一下,然后躲到后面,不在最前面显示,任务栏也没有.只有关掉前面窗口,才能看到程序界面,这时任务栏才有.请高手指教. 解决方案 解决方案二:啥叫多线程技术啊?!你用什么,我不知道.

图片-JAVA在当前程序界面上显示出一个对话框,关闭后当前程序界面乱了。

问题描述 JAVA在当前程序界面上显示出一个对话框,关闭后当前程序界面乱了. 这是刚运行后的界面点击确定后成这样了 刚下面的回答看不懂啊 我新手. 圈着的是那个弹出对话框的的代码..放到RigisterFrame注册界面内的. 解决方案 好像没有设定页面刷新吧.错误提示代码以后,加个页面刷新试试. 解决方案二: //a代表教徒,b代表非教徒 public class Test { /** Enter Content. @author zhangjing @date 2015-5-19 @para

Android怎么实现把子线程接收到的实时数据传送给UI界面并用textview显示

问题描述 Android怎么实现把子线程接收到的实时数据传送给UI界面并用textview显示 40C Android蓝牙模块接受到的输入流要显示在程序中另一个Activit中,并且实时更新数据,哪位大神help一下啊 解决方案 你可以百度一下EventBus这个工具,如果有不懂的可以问我. 解决方案二: 在Android中规定只有UI thread可以更新界面,但是我们开发中会经常遇到一些耗时的操作,这些操作可能会很花费时间,最终的结果却要更新到UI上这种情况下,如果我们将这个操作放到UI t

10个有用的网页应用程序界面技术

阅读本文英文版 (英文编辑:SmashingMagazine:翻译.校对:Lucas-Li) 近年来,越来越多的桌面应用程序移植到互联网上面的.没有了平台限制和安装要求且作为一种服务模式的软件看起来很吸引人的.网络应用程序界面设计的核心是网页设计:但是,它的焦点主要集中在功能上面.为了和桌面程序竞争,网络应用程序必须提供简单 ,直观的以及响应快速的用户界面,这样才能减少用户完成事情 的时间和精力. 过去我们没有用应有的方法来关注网络应用程序,现在该是仔细地研究一些有用的技术和设计方案,以便使网络

ASP程序界面的多语言支持

程序 ASP程序界面的多语言支持 可能有的web应用程序,需要多语言支持,例如,讨论组,既有中文界面,以适合国人使用的方便,又需要英文界面,以满足国际化的需要.我想,似乎没有必要为每一个语言都写一个版本,这不仅比较繁琐,而且以后程序升级就必须修改所有版本的程序.熟悉vc++程序的朋友一定知道通常windows应用程序的国际化手段都是通过rc文件来解决的.只要重新加入不同语言版本的rc文件编译一下就行了.asp程序不能编译也不需编译.我于是开始考虑使用数据库,将ASP程序中使用到的提示信息/甚至图

Delphi中用网页打造程序界面

大家都知道,现在的网页想要多花哨就有多花哨,比起传统Windows应用程序界面单调的菜单加按钮,不知会醒目多少.而且网页素材十分丰富,制作起来也比较简单.如果你想做一个华丽无比,动感十足的程序界面,那Web界面就是你最佳的选择. 第一步:根据需要,用FrontPage或者Dreamweaver做一个界面,界面加上图片,还可加上漂亮的动态Flash.Web界面与程序事件联系在一起的地方就是"超链接",我们以一个简单的播放器程序为例. 比如:要做一个播放器,有"播放"按