自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (38)
  • 收藏
  • 关注

原创 Swift和Objective-C的相互调用

(一)Swift调用Objective-C1)已有的OC项目new file 创建swift 文件2)出现如下所示的弹框配置oc桥接头文件的提示`ZhuRenWong-Bridging-Header`3)点击Create Bridging Header4)自动生成 如下文件5)桥接文件中添加OC的.h文件(如上图所示)6)swift 文件中调用OC 方法 如下图所示附代码:swift调

2017-06-30 15:14:28 3466

原创 子类(Subclass)如何复用StoryBoard中的ViewController?

问题我先定义了一个BaseViewController类,在StoryBoard中也画了一个BaseViewController控制器。我用代码storyboard.instantiateViewController(withIdentifier: "BaseViewController") as! BaseViewController可以很容易的生成BaseViewController实例。但是我

2017-06-23 12:01:38 2196 2

原创 Swift中Delegate的正确使用姿势

目标 在A类里面声明一个ADelegate的代理,B类遵循并使用ADelegate定义的函数。实现A.swift//创建协议 protocol ADelegate:NSObjectProtocol { //回调方法 传一个String类型的值 func delegateMethod(string:String) } class A: UIViewCont

2017-06-22 23:29:54 9518

原创 VIM中的保存和退出、VIM退出命令、如何退出vim编辑、VIM命令大全

退出命令是,按ESC键 跳到命令模式,然后输入q(不保存)或者wq(保存) 退出。其他退出命令::w 保存文件但不退出vi :w file 将修改另外保存到file中,不退出vi :w! 强制保存,不推出vi :wq 保存文件并退出vi :wq! 强制保存文件,并退出vi :q 不保存文件,退出vi :q! 不保存文件,强制退出vi :e! 放弃所有修改,从上次保存文件开始再编辑

2017-06-13 22:57:03 352278 5

翻译 Swift 4.0 更新合集、新功能汇总

Swift 4是苹果计划于2017年秋季推出的最新版本,其主要重点是提供与Swift 3代码的源兼容性,并努力实现ABI稳定性。本文重点介绍对Swift的更改将对您的代码产生最大的影响。 而且,让我们开始吧!

2017-06-10 11:16:19 18199

原创 「iOS」synchronized关键字的含义和用法

Objective-C支持程序中的多线程。这就意味着两个线程有可能同时修改同一个对象,这将在程序中导致严重的问题。为了避免这种多个线程同时执行同一段代码的情况,Objective-C提供了@synchronized()指令。指令@synchronized()通过对一段代码的使用进行加锁。其他试图执行该段代码的线程都会被阻塞,直到加锁线程退出执行该段被保护的代码段,也就是说@synchronize

2017-06-04 09:43:12 636

原创 「Swift」- AnyObject、Any、AnyClass的区别

1. AnyObject :代表任何class类型的对象实例。class Man{}class Woman{}let man = Man()let woman = Woman()var arr:[AnyObject] = [man,woman]for people in arr { if let m = people as? Man { println

2017-06-04 09:43:09 2488

原创 Xcode8 无法使用第三方插件解决方案

解决方案苹果在 Xcode 8 中,取消了对第三方插件的支持,而给出的Xcode Source Editor Extension远远无法满足需求,对于习惯vim coding的童鞋简直无异于死刑, 翻了几篇文章,亲测了几个方法,唯一找到一个既简单又安全又方便的办法,如下:命令行中执行下面的命令$ gem install update_xcode_plugins$ update_xcode_p

2017-06-04 09:43:04 1478

原创 「iOS逆向工程」「iOS安全」必看书单(更新中...)

任何应用的开发中安全都是重中之重,在信息交互异常活跃的现在,信息加密技术显得尤为重要。在app应用开发中,我们需要对应用中的多项数据进行加密处理,从而来保证应用上线后的安全性,给用户一个安全保障。iOS逆向工程和数据安全书单列表如下:苹果安全白皮书( iOS Security Guide)iOS黑客手册(iOS Hacking Guide)iOS逆向工程工具集

2017-06-04 09:43:02 2695

原创 「iOS」 7 8 9 10 view被导航条遮挡的解决方法

添加了一个导航条之后,view被导航条给[覆盖了,并没有从导航条的下面开始。在iOS7中,UIViewController引入了一个新的属性:edgesForExtendedLayout。 这个属性的默认值是UIRectEdgeAll。当你的容器是UINavigationController的时候,默认的布局就是从状态栏的顶部开始的。这就是为什么你设置的控件都往上漂移的原因。有两种方法解决

2017-06-04 09:42:59 530

原创 「iOS」中3种正则表达式的使用与比较

iOS中有三种方式来实现正则表达式的匹配。现在将他们都记录在这里:1.利用NSPredicate(谓词)匹配例如匹配有效邮箱:NSString *email = @"admin@ruanman.net";NSString*regex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";NSPredicate*predicate =

2017-06-04 09:42:56 381

原创 苹果Mac终端快捷键大全

在shell命令终端中,Ctrl+n相当于方向向下的方向键,Ctrl+p相当于方向向上的方向键。在命令终端中通过它们或者方向键可以实现对历史命令的快速查找。这也是快速输入命令的技巧。 在命令终端中可以通过Ctrl+r 实现快速检索使用过的历史命令。Ctrl+r中r是retrieve中r。Ctrl+a:光标回到命令行首。 (a:ahead)Ctrl+e:光标回到命令行尾。 (e:end)

2017-06-04 09:42:53 2076

原创 「iOS」如何在一个工程里引用其他工程

想必很多程序猿都见过那些第三方的框架里边引用其他的工程的代码,初见觉得非常高大上,但是完全没有头绪,一直抱着羡慕的心态就这么不了了之了。后来我们项目里需要引入googleDrive的框架,遇到了一些问题,没办法只能抱着电脑找老大解决,给我解释了一通,貌似是路径问题,当时只是解决了问题,自己也没有去研究,今天看到有人提问相关问题,就想趁此机会总结一下~引用工程这里我准备了两个demo(AutoL

2017-06-04 09:42:51 4481 3

原创 Xcode中蓝色文件夹和黄色文件夹的区别

蓝色文件夹蓝色文件夹(folder)一般作为资源文件夹使用,与黄色文件夹的主要区别是不参与编译,所以说如果你在这些文件夹下编写的逻辑代码是不参与编译的,其他文件也不能直接引用它们,若引用其中文件需要全路径。添加方式:选择Create folder references黄色文件夹黄色文件夹(group)是逻辑文件夹,主要是为了逻辑上的分组,如果手动创建(通过New Gro

2017-06-04 09:42:48 1773

原创 关于Xcode的Other Linker Flags

摘要: 在ios开发过程中,有时候会用到第三方的静态库(.a文件),然后导入后发现编译正常但运行时会出现selector not recognized的错误,从而导致app闪退。接着仔细阅读库文件的说明文档,你可能会在文档中发现诸如在Other Linker Flags中加入-ObjC或者-all_load这样的解决方法。 那么,Other Linker Flags到底是用来干什么的呢?还有-Ob

2017-06-04 09:42:45 219

原创 Cocopods安装使用和错误

Cocopods的安装CocoaPods应该是iOS最常用最有名的类库管理当我们开发iOS应用时,会经常使用到很多第三方开源类库,比如AFNetWorking等等,可能某个类库又用到其他的库,手动一个个去下载所需类库十分麻烦。如果我们项目中用到的类库有更新,还要重新下载新版本,重新加入到项目中,十分麻烦。所以,我们需要 CocoaPods帮我们管理。如何下载和安装CocoaPods?在安装

2017-06-04 09:42:42 347

原创 什么是高内聚、低耦合?

起因:模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单,两个定性的度量标准――耦合性和内聚性。耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。耦合性分类(低――高): 无直接耦合;数据耦合;标记耦合;控制耦合;公共耦合

2017-06-04 09:42:39 478

原创 Xcode一直打印AQDefaultDevice (173): skipping input stream的解决方法

一直不想升级Xcode,但是没办法项目进度只能升级Xcode8,果然不出所料出现了不少bug,Xcode7运行一直没有问题,但是在Xcode8上一直输出AQDefaultDevice (173): skipping input stream网上查到解决办法1.选择 Product -->Scheme-->Edit Scheme2.选择 Arguments3.在Environment Var

2017-06-04 09:42:36 602

原创 「iOS」怎么修改去掉Navigation Bar上的返回按钮文本颜色,箭头颜色以及导航栏按钮的颜色

解决方法 1:自从IOS7后UINavigationBar的一些属性的行为发生了变化.你可以在下图看到:背景颜色self.navigationController.navigationBar.barTintColor = [UIColor blackColor];\//去掉导航条的半透明\Navbar.translucent=YES;按钮颜色(返回按钮的颜色设置)[[UIN

2017-06-04 09:42:34 3866

原创 objective-c 中weak和strong使用的区别(很形象)

(weak和strong)不同的是 当一个对象不再有strong类型的指针指向它的时候 它会被释放 ,即使还有weak型指针指向它。一旦最后一个strong型指针离去 ,这个对象将被释放,所有剩余的weak型指针都将被清除。可能有个例子形容是妥当的。想象我们的对象是一条狗,狗想要跑掉(被释放)。strong型指针就像是栓住的狗。只要你用牵绳挂住狗,狗就不会跑掉。如果有5个人牵着一条狗(

2017-06-04 09:42:31 366

原创 resource fork, Finder information, or similar detritus not allowed 解决方法

解决方法:进入到DerivedData目录,把所有文件都删了。其实就是预编译文件,删了只会影响第一次编译速度,不会影响代码。打开Terminator,cd到工程目录下,执行"xattr -rc .",搞定。

2017-06-04 09:42:28 3209

原创 什么是VIPER 架构模式

从字面意思来理解,VIPER 即 View Interactor Presenter Entity Router(展示器(视图) 交互器 协调器 实体(数据) 路由器),迄今为止,划分责任的粒度是很好的选择。VIPER 在责任划分层面进行 了迭代,VIPER 分为五个层次:展示器 -- 包含 UI 层面的业务逻辑以及在交互器层面的方法调用。交互器 -- 包括关于数据和网络请求的业务逻辑,例如创

2017-06-04 09:42:25 3267

原创 「iOS」Xcode 8 注释快捷键失效的解决方法

单行注释:在方法的地方按Command+/标注的功能,快捷键是Command + Option + /需要在方法名的上面(空白)的地方按Command + Option + / 才管用如果不管用的话 请打开终端,不用选择目录,直接运行:sudo /usr/libexec/xpccachectl。然后重启Xcode ,还不行就要重启电脑。

2017-06-04 09:42:23 709

原创 NSNotificationCenter 的使用详解

通常我们在 iOS 中发生什么事件时该做什么是由 Delegate 实现的,例如 View 加载完后会触发 viewDidLoad。 Apple 还为我们提供了另一种通知响应方式,那就是 NSNotification,系统中(UIKeyboardDidShowNotification 等) 以及某些第三方组件(例如 ASIHTTPRequest 的 kReachabilityChangedNot

2017-06-04 09:42:20 255

原创 NSNotificationCenter使用指南

一个NSNotificationCenter对象(通知中心)提供了在程序中广播消息的机制,它实质上就是一个通知分发表。这个分发表负责维护为各个通知注册的观察者,并在通知到达时,去查找相应的观察者,将通知转发给他们进行处理。本文主要了整理了一下NSNotificationCenter的使用及需要注意的一些问题,并提出了一些未解决的问题,希望能在此得到解答。获取通知中心每个程序都会有一个默认的通

2017-06-04 09:42:17 608

原创 Xcode: bundle format unrecognized, invalid, or unsuitable 解决方法

手机系统升级到10.1.1后 Xcode8.0 不支持 就任性的升级到Xcode8.1 那么你猜对了 坑来了/Users/wudezhi/Library/Developer/Xcode/DerivedData/kyExpress-gwuzzktwodhmlnemsyffjierabxs/Build/Products/Debug-iphonesimulator/TOWebViewContro

2017-06-04 09:42:14 3583

原创 Xcode关于警告AutomaticPreferredMaxLayoutWidth的消除方法

Xcode关于警告AutomaticPreferredMaxLayoutWidth的消除方法在iOS开发中,如果使用到了storyboard与xib文件并且使用autolayout进行自动布局,有时会报出Automatic Preferred Max Layout Width before iOS8.0的警告。工程中如果兼容的iOS版本为iOS8.0一下,并且使用了多行UILabel控件,往往在

2017-06-04 09:42:12 240

原创 git .gitignore失效的解决办法

本文作者陈云峰,转载请注明。前言在使用Git这个多人协作的代码版本控制工具时,为了避免每次提交修改代码时,一些预期外的无用文件的改动同时被提交并加入版本控制,需要将一些和代码无关的无用文件排除在版本控制外,此时也就需要使用.gitignore文件来指定这些需要忽略的文件信息。不同类型的工程都有一些通用的.gitignore范本,一般在项目初始化以后,直接按照范本加入.gitignore文件即

2017-06-04 09:42:09 333

转载 如何构建一个中型的 web 应用(全栈技术)

计算机界的轮子已经如此之多,我的观点是技术不转化成应用是没有价值的,本文主要挑选了一些技术,复用一些优秀的轮子,用最小的成本构建自己的 web 应用。主要内容界面设计boostrap twitter 出品的响应式框架,可以快速构建优美的前端界面material-design-lite Google 出品的Material Design 风格的前端框架前端库 /框架jquery 方便快捷地操纵 do

2017-06-01 23:43:17 356

原创 3分钟实现「iOS」语言本地化/国际化(图文详解)

前言语言本地化,又叫做语言国际化。是指根据用户操作系统的语言设置,自动将应用程序的语言设置为和用户操作系统语言一致的语言。往往一些应用程序需要提供给多个国家的人群使用,或者一个国家有多种语言,这就要求应用程序所展示的文字、图片等信息,能够让讲不同语言的用户读懂、看懂。进而提出为同一个应用程序适配多种语言,也即是国际化。语言国际化之所以又叫做语言本地化,这是站在每个用户的角度而言的,是指能够让用户本地

2017-06-01 01:02:23 1813 2

NitroBake2动力学转换关键帧C4D插件V2.07版下载

NitroBake2动力学转换关键帧C4D插件V2.07版下载

2022-10-27

程序员面试宝典 PDF电子书 高清版

程序员面试宝典 PDF电子书 高清版

2012-01-31

凯立德最新2012电子眼文件(高清版) 红绿灯 测速 预警

凯立德最新2012电子眼文件(高清版) 红绿灯 测速 预警

2012-01-28

极速FLV合并器 亲测好用的FLV合并工具软件

极速FLV 合并器 亲测好用 FLV合并工具 软件

2012-01-03

300多条MTK工作笔记为你的工作节省一半时间.pdf

300多条MTK工作笔记为你的工作节省一半时间.pdf

2011-11-29

RAMDISK 4G, 详细教程版。不会的请来看

RAMDISK 4G 内存 详细教程版 RAMDISK 4G 内存 详细教程版

2011-11-28

最好的自动整理内存的小软件 很实用

最好的自动整理内存的小软件 很实用最好的自动整理内存的小软件 很实用

2011-08-11

MTK_MMI函数手册

MTK_MMI函数手册 MTK MMI 函数 宝典 说明书 API

2010-06-03

QQ号码分析工具2.1.1 整理qq号的工具

QQ号码分析工具2.1.1 整理qq号的工具

2009-05-30

深入BREW开发.rar 深入BREW开发.doc 深入BREW开发.pdf

深入BREW开发.rar 深入BREW开发.doc 深入BREW开发.pdf

2009-05-16

VMware-workstation-6.5汉化补丁VMware6.5汉化补丁 VMware6.5中文 VMware6.5简体中文

VMware-workstation-6.5汉化补丁VMware6.5汉化补丁 VMware6.5中文 VMware6.5简体中文

2009-04-04

金山词霸2009牛津版激活程序(支持sp2更新-内附属使用说明)

金山词霸2009牛津版激活程序(支持sp2更新-内附属使用说明)

2009-04-03

百度笔试题 百度 笔试题

百度笔试题 百度 笔试题 百度 笔试题

2008-10-27

计算机网络(第4版)中文版PDF完美版part1(All 4 Parts)

清华大学出版社 / 2004-8-1 / (美)特南鲍姆(Tanenbaum,A.S.)著,潘爱民 译 / 60 元 ISBN:7302089773

2008-09-13

计算机网络(第4版)中文版PDF完美版part2(All 4 Parts)

清华大学出版社 / 2004-8-1 / (美)特南鲍姆(Tanenbaum,A.S.)著,潘爱民 译 / 60 元 ISBN:7302089773

2008-09-13

计算机网络(第4版)中文版PDF完美版part3(All 4 Parts)

清华大学出版社 / 2004-8-1 / (美)特南鲍姆(Tanenbaum,A.S.)著,潘爱民 译 / 60 元 ISBN:7302089773

2008-09-13

计算机网络(第4版)中文版PDF完美版part4(All 4 Parts)

清华大学出版社 / 2004-8-1 / (美)特南鲍姆(Tanenbaum,A.S.)著,潘爱民 译 / 60 元 ISBN:7302089773

2008-09-13

PDG转PDF万能工具

PDG转PDF万能工具 PDG转PDF万能工具 PDG转PDF万能工具

2008-09-13

C++之父Bjarne Stroustrup 的C++ Style and Technique FAQ

C++之父Bjarne Stroustrup 的C++ Style and Technique FAQ

2008-07-06

西北工业大学C++全套课件

西北工业大学 C++ 全套课件西北工业大学c++全套课件,绝对好的课件

2008-04-21

BCGControlBar.专业版.v9.4.Full.Source 完整版Part1

BCGControlBar.专业版.v9.4.Full.Source 完整版Part1

2008-03-29

BCGControlBar.专业版.v9.4.Full.Source 完整版Part2

BCGControlBar.专业版.v9.4.Full.Source 完整版Part2

2008-03-29

Mycolor 我的取色器2007 很强大的取色软件

Mycolor 我的取色器2007 很强大的取色软件

2008-03-29

200个XP系统图标 很好很强大

200个XP系统图标 很好很强大

2008-03-29

很好的FileDialog控件 类似IE的选项对话框以及超链接类源码

很好的FileDialog控件 类似IE的选项对话框以及超链接类源码

2008-03-29

VC6.0透明背景的对话框示例代码

VC6.0 透明背景 对话框 示例代码

2008-03-29

last_order fantastic_dream Slicer系列精美图标下载

last_order fantastic_dream Slicer 系列 精美图标

2008-03-29

Adobe奥多比注册机全集 35合1 史上最强大

Adobe 奥多比 注册机全集 35合1 史上最强大

2008-03-14

北京大学信息学院数理逻辑经典教程

北京大学信息学院数理逻辑经典教程 共333页教程 计算机逻辑的经典教材

2008-01-02

利用多线程在程序繁忙时显示进度条源代码

利用多线程在程序繁忙时显示进度条源代码 很好的了解学习多线程的源代码

2008-01-01

MFC多线程编程源代码和说明文档(二)

MFC多线程编程源代码和说明文档(二)

2008-01-01

MFC多线程编程源代码和说明文档

MFC多线程编程源代码和说明文档

2008-01-01

ubuntu实用教程

ubuntu实用教程<br>

2007-12-30

在单文档程序中动态切换多个窗体的源码程序

摘要:本文通过一个程序实例描述了在VC++6.0下如何在单文档程序中通过菜单动态控制多 个窗体的切换。    一、 引言    我们在编制程序中根据需求的不同会在程序风格上选择多文档、单文档或是对话框模式 ,对于单文档模式可能是我们使用比较多的,但有时我们想采用单文档的形式显示多个不同 的窗体,如作为数据库前台应用程序就会遇到此类问题,数据库由大量的表单组成,而同常 一个窗体内只用来显示一个表单,所以要显示其他的表单时就要用到切换窗体的技术了,下 面就通过一个程序说明该技术的实现方法。    二、 实现技术    新建一个基于CFormView的单文档应用程序,再添加一个窗体和与之对应的基于 CFormView的新视类,然后通过在主框架类里添加控制代码和菜单控制实现这两个窗体的动态 切换,下面就是具体的实现过程:    (一) 用"MFC AppWizard(exe)"建立一个新项目"SwitchForm",并在第二步的创建类型上选 择为"Single documnet"单文档模式,第三、四、五、六步均取确省状态,最后一步选择 "CFormView"作为视类的基类。点按"完成"按钮,生成了初始工程"SwitchForm"。    (二) 点选菜单"Insert"、"Resource…",在弹出的"Insert Resource"对话框中"Dialog"树 里的"IDD_FORMVIEW",点击"New"按钮,生成了一个新的窗体,将其ID号改为"IDD_NEXTFORM"。 在原有的窗体上加一个静态框"这是第一个窗体";在新建的窗体上也添加一个静态框"这是第二 个窗体"。    (三) 在菜单资源的"IDR_MAINFRAME"上添加一级菜单"窗体切换",及其二级菜单"第一个窗 体"、"第二个窗体",其标识号分别为"ID_FIRSTFORM"和"ID_SECONDFORM"。修该"第一个窗体" 的属性为"Checked",表明程序初始时显示的是第一个窗体。    (四) 在"ClassView"属性页里的"SwitchForm classes"上右键,在弹出菜单上选择 "New Class…",弹出"New Class"对话框,选择"Dialog ID:"为我们刚添加的新窗体 "IDD_NEXTFORM",选择"Base class:"为"CFormView",类名取为"CNextFormView",这样就把第 二个窗体对应的视图类添加到了工程。 (五) 在框架类里添加函数SwitchToForm(): void CMainFrame::SwitchToForm(int nForm) { file://获取原来的活动窗体的视图句柄 CView* pOldActiveView = GetActiveView(); file://获取由"nForm"标识的窗体所对应的视图句柄 CView* pNewActiveView = (CView*) GetDlgItem(nForm); file://若视图句柄为空,则创建一新的。 if (pNewActiveView == NULL) { if (nForm == IDD_SW99vCHFORM_FORM) pNewActiveView = (CView*)new CSwitchFormView; if (nForm == IDD_NEXTFORM) pNewActiveView = (CView*)new CNextFormView; CCreateContext context; context.m_pCurrentDoc = pOldActiveView->GetDocument(); pNewActiveView->Create(NULL,NULL,0L, CFrameWnd::rectDefault, this,nForm,&context); pNewActiveView->OnInitialUpdate(); } file://选择pNewActiveView为活动窗体 SetActiveView(pNewActiveView); file://显示活动窗体,隐藏非活动窗体 pNewActiveView->ShowWindow(SW_SHOW); pOldActiveView->ShowWindow(SW_HIDE); int ID; if(pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CSwitchFormView)) ID=IDD_SW99vCHFORM_FORM; if(pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CNextFormView)) ID=IDD_NEXTFORM; file://设置窗体的ID号 pOldActiveView->SetDlgCtrlID(ID); pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST); RecalcLayout(); }    (六)添加两个菜单相对应的命令响应函数和更新函数如下: void CMainFrame::OnFirstform() { file://通过IsKindOf函数确定当前活动窗口是否是第一个窗口,如是,则无须切换, file://否则将通过SwitchToForm函数将当前活动窗口切换到"IDD_SW99vCHFORM_FORM" file://标识的第二个窗体。 if (GetActiveView()->IsKindOf(RUNTIME_CLASS(CSwitchFormView))) return; SwitchToForm(IDD_SW99vCHFORM_FORM); } void CMainFrame::OnUpdateFirstform(CCmdUI* pCmdUI) { file://通过IsKindOf函数判断当前活动窗口是否是第一个窗体,如是则将其选中。 pCmdUI->SetCheck(GetActiveView()->IsKindOf(RUNTIME_CLASS(CSwitchFormView))); } void CMainFrame::OnSecondform() { if (GetActiveView()->IsKindOf(RUNTIME_CLASS(CNextFormView))) return; SwitchToForm(IDD_NEXTFORM); } void CMainFrame::OnUpdateSecondform(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetActiveView()->IsKindOf(RUNTIME_CLASS(CNextFormView))); }    然后再在该文件开始处添加对两个视图类的引用: #include "SwitchFormDoc.h" #include "SwitchFormView.h" #include "NextFormView.h"    在此须注意:应在两个视类的引用之前添加对文档类的引用,否则会引起编译错误。另外,由于视 类的构造函数在声明时都确省的声明为保护型的,在框架类中无法引用,所以还要将两个视类的类 声明改动如下: class CNextFormView : public CFormView { public: file://将protected 改为public. CNextFormView(); …… }; class CSwitchFormView : public CFormView { public: file://将protected 改为public. CSwitchFormView(); …… };    三、 编译运行    编译运行程序,开始时的窗体上有"这是第一个窗体的字样",菜单也只有"第一个窗体"是被选中的, 当前的活动窗体是第一个窗体;点击菜单"第二个窗体",视图中的窗体上的字样变成了"这是第二 个 窗体",同时选中的菜单也由"第一个窗体"变成了"第二个窗体",实现了通过菜单将窗体进行动态切换。    总结:此程序中关键的是SwitchToView函数,在此函数中,程序搜索所有当前文档的显示窗口来查找与CruntimeClass变量匹配的视图类。如果找到,该窗口被激活。通过与之类似的方法,还可以实现在多文档模式下的单档(文档)多视(视图),通过不同的视图以不同的方式显示来自同一份文档的数据,以更好的满足程序的需要。

2007-12-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除