多文档界面中,我的子菜单和父菜单的菜单项名称是一样的(菜单项的ID也一样),菜单消息响应函数放在CDocument源文件中,要求点击响应菜单项,能新建一个文本文档,并向其中写入一些数据或文字。程序中设置执行程序后首先出现的是无子窗口的父窗口。但是我发现,相应菜单项为灰色,不可用,除非新建一个文档或打开一个文档,即打开子窗口才能用。若把相应菜单项的消息响应函数放在CMainFrm源文件中,则只有父窗口时,菜单项可用,但是执行会出现写入数据出错。请问如何实现只开启父窗口时,各菜单项均可用,但是又可以向相应的文本文档中写入数据或文字呢????

解决方案 »

  1.   

    MFC默认,当窗口类中没有消息的响应函数时,菜单项是不可用的。这个功能可以通过属性m_bAutoMenuEnable进行控制,可以在父窗口类的构造函数中设置m_bAutoMenuEnable=false,这样菜单就完全受你自己的代码了。
      

  2.   

    我把m_bAutoMenuEnable=false放在父窗口的构造函数中了,菜单项也可用了,但是点击却没有反映,一旦打开子窗口,点击该菜单项就可以有反映,请问是什么原因?跟菜单消息响应函数放在CDocument源文件中有关吗?请问如何解决这个问题呢???
      

  3.   

    父窗口中没有对菜单消息响应的函数点击当然没反应了。CDocument是跟视图也就是子窗口关联在一起的,视图没打开时,文档没法获得消息,打开视图后,消息可以传递到文档中,点击菜单当然有反应了。
    至于你说的不创建视图下处理文档对象,你可以看一看MFC的文档/视图结构
      

  4.   

    MDI主框架里面哪来的文本文档?你要对文档操作的话,至少应该建立一个文档再开始操作吧。这也是默认的行为(如果没有在命令行指定打开的文档,那么会自动新建一个)
    参考文章
    http://msdn.microsoft.com/library/en-us/vclib/html/_MFC_CCommandLineInfo.3a3a.m_nShellCommand.asp