1、我用向导生成了一个单文档的程序。
2、我新建了一个FormView类。
3、我在View中创建FormView对象并显示。
4、我建了一个菜单并奖其放在View中执行代码来显示或隐藏FormView。5、出现奇怪问题:录我单击了FormView中的文本框后除了“退出”和“关于”
菜单其它的菜单全部被禁用了。我在MainFrame中将m_bAutoMenuEnable=FALSE后
菜单不再是灰色,并且可以单击,但是一样不起作用,根本就不执行任何代码。
这个问题我觉得很奇怪,请高手指点。6、将这些菜单的执行部分放在MainFrame中就都好了。7、简单的问题:我在MainFrame中怎样获得CView的指针?我用过GetActiveView()
但是好象并不太好用。请高手指点。

解决方案 »

  1.   

    因为你使用了两个View,当FormView激活时,UPDATE_COMMAND_UI将由FormView来处理,而不是由原View来处理,所以菜单都变灰了。当把处理代码放到MainFrame中时,由于UPDATE_COMMAND_UI消息在交给子窗口FormView中处理前就由MainFrame处理了,所以UPDATE_COMMAND_UI也不再向下传递了。
    如果你是用单文档,就只有GetActiveView()最好用了。不过你用的好像是多文档,你就通过GetFirstViewPosition() 和 GetNextView()来取得吧
      

  2.   

    可是我设了 
    m_bAutoMenuEnable=FALSE;
    菜单不会变灰了,但是照样不起作用啊.这是为什么?
      

  3.   

    对了,另外,我建的是单文档的程序,只是又创建了一个FormView而已,
    不是MDI的多文档项目,用不了GetFirstViewPosition()和GetNextView()
      

  4.   

    第一个问题Semigod()说得对,主要是消息处理混乱
    第二个我只知道一个笨办法一定可以用
    用全局变量,在View类的构造函数里加xxxx=this;
    在MainFrame里调用
      

  5.   

    第一个问题我也认为Semigod()说得对,但我奇怪的是我已经设了 
    m_bAutoMenuEnable=FALSE;
    菜单不会变灰了,可以单击,但是照样不起作用.第二个问题当然可以有别的办法,比如启动的时候发一个消息MainFrame来传
    View的指针.但是我想知道MainFrame自已或者Afx系列有没有办法来得到
    View的指针.
      

  6.   

    1:变灰和能处理是两种概念。
       变灰仅仅是让它不可点击。但是即使是没有变灰,但是如果点击送出消息以后无法找到相应的消息循环处理函数,就会出现楼主所说的没有效果的点击(没有处理啊)
    2:即使是你创建的是SDI,但是你又创建了一个CFormView实例,用GetActiveView()去检测Frame中的CView对象,但是已经有了两个,你说计算机怎么处理(应该是不好用的)。愚见。
      

  7.   

    现在我想在CView类中来控制CFormView类,由CMainFrame控制CView类
    但是CMainFrame类好象没有办法能够得到自已的CView--除了GetActiveView()--第一个问题我觉得大家已经说的很清楚了我也比较认同 asdmonster(asd)的说法,很感谢。
    现在是第二个问题没有答案了。