我的代码如下:
void CTestDlg::OnCreateNewWindow()
{
CFrameWnd msgWnd;
msgWnd.Create(NULL,NULL,WS_VISIBLE|WS_OVERLAPPEDWINDOW,CRect(0,0,100,100));
msgWnd.ShowWindow(SW_SHOW);
msgWnd.UpdateWindow();
}该函数是对话框里的一个按钮函数,响应按钮事件,当按下这个按钮的时候,我想创建一个对话框的子窗口。窗口是可以创建的,但是显示的时间却很短,每次创建了后,都只是闪了一下就消失了,请问是怎么回事啊!谢谢了

解决方案 »

  1.   

    你的CFrameWnd msgWnd;是一个自动变量 函数运行完 就被弹出栈销毁了 我觉得
      

  2.   

    你把它定义到你的CTestDlg类声明里 就能显示了PS:这里不能编辑自己的发言吗?
      

  3.   

    对,CFrameWnd msgWnd; 是一个函数中定义的临时变量,函数执行完毕后就释放,窗口也被销毁。可以把他定义为对话框的成员变量或是是函数中的静态变量。
      

  4.   

    CFrameWnd * msgWnd;
    msgWnd = new CFrameWnd;
    msgWnd->Create(NULL,NULL,WS_VISIBLE|WS_OVERLAPPEDWINDOW,CRect(0,0,100,100));
    msgWnd->ShowWindow(SW_SHOW);
    msgWnd->UpdateWindow();改成上述代码,请LZ自己销毁哈..不然内存泄露可别来找我..-_-0
      

  5.   

    销毁的方法
    CFrameWnd * msgWnd;
    作为对话框成员.
    然后在析构函数,或者别的..随便了.delete
      

  6.   

    我把它设置为类的成员变量后。(这样设置的:CFrameWnd msgWnd)
    什么在关闭该弹出窗口的时候系统报错:Debug Assertion Failed!
    Program:C:\test\Debug\test.exe
    File:dbgheap.c
    Line:1011
    Expression:_CrtIsValidHeapPointer(pUserData)而把他设置为函数内的CFrameWnd *msgWnd却没有什么问题!请问为什么?