📄 subject_33568.htm
字号:
<br>内容:下面我把我的观点更新一下:<BR> <BR> 我个人的理解(一):<BR> 程序是否支持多种“不同类型”的文档,与sdi和mdi无关,与<BR>singledoctemplate和multidoctemplate有关!!下面我还是用侯sir的原话来证明:<BR><BR> 我想把侯sir的深入浅出mfc 中的一段 写出来:<BR> 第253页:mdi程序也可以用csingledoctemplate,sdi可以使用cmultidoctemplate<BR>(我同意侯sir的这种观点,不过我不知道,该怎么实现这两个“可以”,如果你知道,请告知,<BR>我觉得,当您把一种好的想法拿出来与人分享时,您会加深对它的理解!!!!)<BR><BR> 还是第253页 :csigledoctemlate一次只能打开一种文档类型,mdidoctemplate<BR>可以同时支持多种文档类型<BR> <BR><BR> 为什么mdidoctemaplate的功能比singledoctemplate“强大”呢??<BR>侯sir也给出了解释:<BR><BR><BR> 第347页 : 如果你使用csingledoctemplate,它有一个成员变量 <BR>cdocument m_pDocument,而cmultidocuplate 有一个成员变量:<BR>CPtrlist m_pdoclist,它表示能同时打开多个docments。<BR><BR><BR> 所以,我认为,既然所有的事情,都被csingledocplate和cmultidocplate干了,<BR>那么sdi和mdi,还有什么意义呢??<BR> 可惜,侯sir似乎也没有很好的说明这个问题!<BR><BR><BR> 我个人的理解(二):既然“CMultiDocTemplate中就有一个CPtrList m_docList”<BR>那么,CMultiDocTemplate *pDocTemplate;<BR> pDocTemplate=new CMultiDocTeplate(IDR,<BR> CRunTimeClass(mydoc1),<BR> CRunTimeClass(frameALL)<BR> CRunTimeClass(ViewAll)<BR> );<BR> addDocTemplate(pDocTemplate)<BR> <BR><BR> pDocTemplate=new CMultiDocTeplate(IDR,<BR> CRunTimeClass(mydoc2),<BR> CRunTimeClass(frameALL)<BR> CRunTimeClass(ViewAll)<BR> );<BR> addDocTemplate(pDocTemplate)<BR>是不是有点麻烦呢??为什么不仅仅构造一个CMultiDocTeplate对象,然后把mydoc1和mydoc2<BR>分别加到CPtrList m_docList中去呢??(我不知道该怎么操作,但是理论上应该可以的,<BR>毕竟我的两个doc用的view和fuame以及idr都相同)<BR><BR><BR><BR> 我个人的理解(三):不管是CMultiDocTeplate还是CSinlgeDocTeplate,程序中都有一个<BR>文档模板列表,既然如此<BR> CSingleDocTemplate *pDocTemplate;<BR> pDocTemplate=new CSinlgeDocTeplate(IDR,<BR> CRunTimeClass(mydoc1),<BR> CRunTimeClass(frameALL)<BR> CRunTimeClass(ViewAll)<BR> );<BR> addDocTemplate(pDocTemplate)<BR> <BR><BR> pDocTemplate=new CSingleDocTeplate(IDR,<BR> CRunTimeClass(mydoc2),<BR> CRunTimeClass(frameALL)<BR> CRunTimeClass(ViewAll)<BR> );<BR> addDocTemplate(pDocTemplate)<BR> 在理论上又可以做到了,虽然“操作的时候会有很多的erros和warnings等着您去解决”<BR><BR><BR><BR> <BR> <BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:sdf 回复日期:2003-03-23 10:15:39
<br>内容:fishsward :<BR>我觉得本质的区别在于“同时”,多文档可以同时打开不同的文档,而单文档每次只能打开一个文档,他不能同时打开两个文档,至于它是不是可以打开两个以上不同的文档,当然可以,但不能同时。多文档的好处就在于能够同时打开很多中文档
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:fishsward 回复日期:2003-03-23 11:43:57
<br>内容:有没有其它的观点??
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:思考者 回复日期:2003-03-23 13:55:05
<br>内容: 当我再次来到这个问题时,我不能随便回答了,因为我发觉,你对他们的理解,比我要深得多,不然就不能提出这样的问题。所以我花了一上午的时间去图书馆查了一下。<BR> 也弄明白了你所要问的是什么?确实,你我的理解存在许多的误区,<BR><BR> 首先,说明你所说的不同类型是什么概念?<BR> 举例:如word中,点”打开“,你可在弹出的对话框中,选*.doc 文档,也可选*.txt文档,也可选*.rtf 文档。我们假定mydoc1为文本文档。mydoc2为图象文档,而不影响问题的实质。<BR><BR> 其次,SDI和MDI与singledoctemplate和multidoctemplate的关系<BR><BR>说明(<BR>singledoctemplate是类CSingleDocTemplate的对象。 multidoctemplate类CMultiDocTemplate的对象。)<BR><BR>而类CSingleDocTemplate和CMultiDocTemplate都是类CDocTemplate类的派生类。<BR><BR> 1. 什么是SDI与MDI,关键区别,它们是否能同时打开多个文档。如果在同一时间只能打开一个文档,那它就是SDI文档。因此为管理方便,从<BR>CDocTemplate类派生出类CSingleDocTemplate类来专门应用于SDI。也就是说,CSingleDocTemplate的对象singledoctemplate只能用于SDI(见<<Visual C++ 6.0应用指南>>人民邮电版第116页第一行)<BR>与上类似,如果同一时间可以打开多个文档,那它就是MDI文档。就要用CMultiDocTemplate。对了,AddDocTemplate 类CWinApp的一个应用函数。<BR>所以它们的关系是非常密切的。<BR><BR> 三, 你所感到不解的地方,是:(不知对不对)<BR><BR>如果 我是在同一时间内只打开一个文档,但这次我打开的是文本文档mydoc1,但我下一次打开的是图形文档mydoc2.我认为这依然是SDI文档。如你上面的,我copy到此:<BR> CSingleDocTemplate *pDocTemplate;<BR> pDocTemplate=new CSinlgeDocTeplate(IDR,<BR> CRunTimeClass(mydoc1),<BR> CRunTimeClass(frameALL)<BR> CRunTimeClass(ViewAll)<BR> );<BR> addDocTemplate(pDocTemplate)<BR> <BR><BR> pDocTemplate=new CSingleDocTeplate(IDR,<BR> CRunTimeClass(mydoc2),<BR> CRunTimeClass(frameALL)<BR> CRunTimeClass(ViewAll)<BR> );<BR> addDocTemplate(pDocTemplate)<BR> <BR>要实现这个功能,应该是可行的。(不过我还没有试,等明天我试了后再交流交流);但估计不是这么简单如你上面再加上一个CSingleDocTeplate模板这么简单。<BR><BR> 如果我只有文档类型如mydoc1的文本文档,要可以同时打开多个文本文档同时编辑。这也要用multidoctemplate。如果加上一个文档类型如mydoc2的图形文档,也要可以同时打开多个文本文档和或图形文档同时编辑。也要用multidoctemplate。只要用了singledoctemplate就只能在同一时间打开一个,且它就是SDI。否则就出错。<BR><BR> <BR>最后,你的问题就:能不能 同一时间内只打开一个文档,但这次我打开的是类型为文本文档的mydoc1,但我下一次打开的是类型为图形文档的mydoc2.<BR> <BR><BR>这里就出现了一个问题,一本书上说CSingleDocTeplate只适用于SDI。一个说可以用于MDI。怪不得,你说与SDI和MDI无关。这样这个问题,也就非我所能解决。它们的共同点是都是CDodTemplate的派生类。从这点看,也许可以相互用吧。但估计,要做许多手术,不如不混用的好。但这探计问题实质的角度看,弄明白总是有好处的。<BR> <BR>谢谢你提出这个问题。能让我也加深了理解。以上希望对你有所帮助。<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:思考者 回复日期:2003-03-23 15:19:41
<br>内容:我的不解:<BR> 在多文档中,要能同时打开文本文档和图形文档(或不同类型的文档)只要创建多个文档模板,为每一个文档模板增加对函数AddDocTemplate 的调用就可以了。(每种文档模板都会有一个图标为它注册);这好办。<BR> 在单文档中,要支持多种类型的文档应该怎么弄?因为SDI中只有一个文档对象,也就是说只有一个文档模板。即<BR>:<BR> CSingleDocTemplate *pDocTemplate;<BR> pDocTemplate=new CSinlgeDocTeplate(IDR,<BR> CRunTimeClass(mydoc),<BR> CRunTimeClass(MainFrame)<BR> CRunTimeClass(ViewAll)<BR> );<BR> addDocTemplate(pDocTemplate)<BR><BR>问题,一个文档对象能支持多种类型不同的文档吗?如果不能,则增加一个CSingleDocTemplate *pDocTemplate2;<BR> pDocTemplate2=new CSinlgeDocTeplate(…………)后,他还是单文档吗?如果不是单文档,那就是多文档,但不是有的书上说,CSingleDocTemplate 只适用于单文档即(SDI)。<BR><BR>除非,单文档(sdi)不能支持多种类型的的文档。<BR><BR>所以我最后的回答是:<BR>要实现:<BR>同一时间内只打开一个文档,但这次我打开的是类型为文本文档的mydoc1,但我下一次打开的是类型为图形文档的mydoc2.这一功能用CSingleDocTeplate解决不了。即在单文档中解决不了。<BR> 只能在多文档中,使用CMultiDocTemplate来解决。<BR><BR>请各位高手,指正。<BR><BR> <BR><BR> <BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:fishsward 回复日期:2003-03-23 21:40:34
<br>内容: to 思考者:<BR> 首先,还是要谢谢您的回答,谢谢所有参与过这个帖子的朋友。<BR><BR> 然后,我想就两个问题说明我的观点:<BR><BR> 1。 我们对“多文档”的定义不同(或者说理解不同)。依照您看,“多文档”是可以<BR>“同时”支持多个“文档”,这些文档可能是同一种类型,也可能是不同类型,甚至还有可能只是<BR>“同一个文档”的多个显示(比如说执行了window-》new window时)。而我的理解是:程序<BR>能够打开多种文档,即为“多文档”,也就是说,有可能打开另外一“种”文档之前,必须关闭<BR>当前文档!!<BR> 如果依照您的理解,的确,只有cmultidoctemplate才能实现多文档,<BR> 而 CSingleDocTemplate *pDocTemplate;<BR> pDocTemplate=new CSinlgeDocTeplate(IDR,<BR> CRunTimeClass(mydoc1),<BR> CRunTimeClass(frameALL)<BR> CRunTimeClass(ViewAll)<BR> );<BR> addDocTemplate(pDocTemplate)<BR> <BR><BR> pDocTemplate=new CSingleDocTeplate(IDR,<BR> CRunTimeClass(mydoc2),<BR> CRunTimeClass(frameALL)<BR> CRunTimeClass(ViewAll)<BR> );<BR> addDocTemplate(pDocTemplate)<BR>依旧还是单文档,因为它不能同时打开mydoc1和mydoc2<BR>从这方面来说,其实我们的理解是没有分歧的!!!<BR><BR> 2。我想说明一下Multidoctemplate的“multi”的作用:<BR>我觉得,“multi”并不是说仅仅靠一个“CMultiDocTeplate对象,然后把mydoc1和mydoc2<BR>分别加到CPtrList m_docList中去”,就可以实现打开多种类型的文档!!!!<BR>“Multi”仅仅是说能够“同时”打开多个文档,一个"CMultiDocTeplate对象"只能打开一种<BR>类型的文档.您希望您的程序支持多少种类型的文档,您就必须构造多少个"CMultiDocTeplate对象".<BR> CMultiDocTeplate对象的成员变量CPtrList m_docList只是指向该"CMultiDocTeplate对象"能支持的文档”,并且他们是“同一种”类型的(也就是说<BR>当您仅仅定义了:pDocTemplate=new CMultiDocTeplate(IDR,<BR> CRunTimeClass(mydoc1),<BR> CRunTimeClass(frameALL)<BR> CRunTimeClass(ViewAll)<BR> );<BR> addDocTemplate(pDocTemplate)<BR>时,您的程序其实仅仅支持一“种”文档————mydoc1类型的文档,只不过可以同时打开很多“个”“这种类型”的文档!!!<BR><BR> 而用"CSingleDocTeplate"的弱点在哪里呢???其实CSingleDocTeplate程序也能<BR>打开多种类型的文档,您定义了多少个CSingleDocTeplate对象,您的程序就能支持多少种<BR>文档,只不过,它们不能同时打开罢了(从这方面来说,tangjinxiang朋友的回答,其实<BR>真正的切中了要害!!!)<BR><BR> 不知您对此还有何看法??<BR> 愿问您的高见<BR><BR><BR><BR>
<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -