我在父窗口的某个按钮上点一下后要弹出一个子窗口
比如在按钮函数中定义一个类
CSubDlg SubDlg;然后SubDlg.DoModal弹出对话框
但是SubDlg里面有个静态文本控件,我想在DoModal前修改其显示的文字比如子窗口的类里我创建了变量m_static_edit
在DoModal之前我SubDlg.m_static_edit.SetWindowText("123123123")
执行这句话的时候就报错了,别人告诉我那是因为虽然定义了SubDlg但是SubDlg里面的空间句柄还未生成
这里我不是很理解,因为之前我用的是C,刚接触C++和MFC,在C里面结构体定义了一个变量
当实体化一个结构体的时候那个变量应该也是分配了内存空间,这里我实例化一个字窗口的对象后,m_static_edit这个为什么还不能使用以上是疑问1然后别人跟我说,要先Create一下
于是我SubDlg.Create(子窗口ID)
之后就能使用m_static_edit来设置控件的文本了
不过Create后就成了非模态化要用ShowWindow了而不能再使用DoModal了
而我希望弹出子窗口,等子窗口点了确定返回,然后父窗口的那个按钮继续往下执行,再次改变该子窗口的静态文本中的内容,然后再次弹出子窗口,以此类推,比如有些恶作剧小程序点了一个按钮后弹出一个框说你好啊,然后点下确定它又弹出来了你是谁啊,直到点了N次可能不弹了这样的东西。
之前搜索过,有的同学说可以弹出子窗口禁用父窗口,这样弹出后就不能点父窗口了,这样貌似就像模态化了
但是父窗口没等子窗口返回就执行以下面的代码了,然后按了一下按钮后直接显示我设置的最后一句话了,这显然不是我想要的以上是疑问2请问用什么方法可以实现我想要的东西,小弟刚接触MFC/C++,望大侠指教啊,顺便上面那个疑问也帮忙回答一下啊不知道我说清楚了没

解决方案 »

  1.   

    模态对话框创建前,是不能访问里面的控件的,但可以通过访问变量来控制控件里面的内容1、在你的对话框中建立一个成员变量CString str1;2、对话框总建立一个赋值方法:void SetText(str){
        str1=str;   //给成员变量赋值
    }3、在Init中给控件赋值,把成员变量赋值给控件。    GetDlgItem(IDC_STATIC1)->SetWindowText(str1);  在父窗口中调用赋值方法后,再DoModalCDialog dlg;
    dlg.SetText(L"控件文本内容");
    dlg.DoModal;
      

  2.   

    因为DoModal()之前,你的窗口类还没有和具体的窗口关联起来,即你窗口类的m_hWnd为NULL。所以在这之前所有与窗口相关的操作都是非法的。DoModal()之后窗口就销毁了,即即你窗口类的m_hWnd又为NULL了,所以在这之后与窗口相关的操作也是非法的。你可以将你操作窗口的相关代码放到你CSubDlg类的OnInitDialog函数中即可。