void CMyDaybookView::OnAct() 
{
// TODO: Add your command handler code here
CDiaCode dlg;
dlg.DoModal();
if(dlg.m_bLogin =IDOK)
    GetDlgItem(IDM_SAVE)->EnableWindow();
}其中的m_bLogin 是CDiaCode中的一个变量。为什么出现
”???“内存指令的”0x00000020"为Read,该内存不能为Read.请回答的具体点啊

解决方案 »

  1.   

    if(dlg.m_bLogin ==  IDOK)
        GetDlgItem(IDM_SAVE)->EnableWindow(); 
    这个地方应该是  == 吧,你确认一下另外你要确认一下 GetDlgItem(IDM_SAVE) 是否返回了有效值
      

  2.   

    改成== 还是一样。
    看来毛病就在这 GetDlgItem(IDM_SAVE) 是否返回了有效值怎么看啊
      

  3.   

    if(dlg.m_bLogin =IDOK)
    {
    CWnd *pWnd = GetDlgItem(IDM_SAVE);
    pWnd ->EnableWindow(); 
     
    }   
    你打一个断点,看一下 pWnd 的值
      

  4.   

    等于零说明这个指针没有实例化,它的值为空,所以会出现你说的那个错误。你要把pwnd赋为当前的窗体句柄指针。
      

  5.   

    GetDlgItem是不是只能用于获取对话框上控件的指针啊
    我这里是个单文档窗体,毛病是不是在这啊?
    请问如何获得单文档上菜单控件的指针?
      

  6.   

    IDM_SAVE是什么?
    是菜单的ID?
      

  7.   

    if(dlg.m_bLogin == IDOK)

    CMenu *pMenu=GetMenu(IDM_SAVE);
    pMenu ->EnableWindow(); 
    }  
    报错EnableWindow() is not a mumber of "CMenu"
      

  8.   

    那就是告诉你EnableWindow不是CMenu的成员函数,你用其他的试试看。EnableMenuItem是成员函数
      

  9.   

    if(dlg.m_bLogin == IDOK)

    CMenu *pMenu=GetMenu(IDM_SAVE);
    pMenu ->EnableMenuItem(); 
    }  error C2660: 'GetMenu' : function does not take 1 parameters
     error C2660: 'EnableMenuItem' : function does not take 0 parameters
    Error executing cl.exe.
      

  10.   

    要禁止一个菜单项,以 IDM_SAVE 为例
    需要先映射IDM_SAVE 的 Update_command_UI 消息函数
    在响应函数里面
    PCmdUI->Enable(FALSE)大致是这样的
      

  11.   


    不管是起用还是禁用
    都不能用你现在的方法
    因为GetDlgItem得到的是对话框元素的窗口句柄
    菜单不是对话框元素
    而且菜单句柄和窗口句柄是两回事
    影射Update_command消息的位置和影射菜单消息的位置在一起
    这个消息是系统自动调用的
    不过如果你做的是基于对话框的程序
    想成功映射这个消息还需要一些特殊处理
    你可以参考这个帖子
    http://topic.csdn.net/u/20100118/13/e8c50e12-0b78-4979-be04-e9c11a714c4f.html