我在OnInitDialog函数中创建了一个对象,在OnSize中使用发现出错,窗口句柄(m_hWnd)为NULL。
后来在两个函数中分别使用AfxMessageBox弹出消息框,发现OnSize中的消息是先弹出的!这就是说OnSize先于OnInitDialog函数而运行了。
那我在OnInitDialog中创建的对象怎么在OnSize中使用呢?我只是想在对话开显示的时候将创建的对象充满对话框的大小。不知道有没有别的办法?

解决方案 »

  1.   

    是的。在OnCreate中创建或者在OnSize中先检查GetSafeHwnd()是否为空
      

  2.   

    if(m_hWnd)
    {
       resize();//
    }
      

  3.   

    这种问题,自己设置断点即可判断谁先谁后=======================================
    那我在OnInitDialog中创建的对象怎么在OnSize中使用呢?在onsize中判断该对象是否为NULL,若未创建,则do nothing,
    ==================================
      

  4.   

    对, 最好在OnSize判断对象是否创建.
      

  5.   

    嗯,是的,我判断出它没有创建。现在问题是我需要在OnSize中完成一些东西,就是将对象最大化,填满Dialog窗口,那该怎么办
      

  6.   

    可以在判断出窗口句柄不为NULL的情况下,再将对象最大化;如果为空,不用理它
      

  7.   

    ls没理解我的意思,我现在是需要将对象最大化,对象为空而无法最大化不是我所希望的。
    我现在想有什么办法,比如在别的对象已经创建了的地方完成最大化呢?我记得以前就是在OnSize里用的没错,不知道这次怎么回事。
      

  8.   

    在OnCreate里面写吧,顺序是这样的OnCreate、OnSize、??、OnSize另外如果是对框框编辑器里面添加的控件,在第一个的OnSize时候控件还没有被创建出来,第二个的时候则已经创建出来。OnInitDialog不知道是什么时候,估计在??的位置,你可以用断点试试……
      

  9.   

    我记得以前就是在OnSize里用的没错,不知道这次怎么回事。
    那你看看你以前的代码了~
    你可以在OnCreate实现啊~
      

  10.   

    好像是我搞错了,“OnCreate、OnSize、??、OnSize”,应该没有最后一个OnSize,上次我的那个对话框是嵌套的子对话框,在主对话框里面又MoveWindow了一下,所以有最后一个OnSize。你也可以像上面几位说的那样判断句柄是否为空,在OnInitDialog最后手工调用OnSize也可以阿。当然还是推荐在OnCreate里面创建。
      

  11.   

    谢谢各位! 已经改在OnCreate中创建的可以了. 
    几个函数的运行顺序是这样的: 
    Create => OnCreate => OnSize => OnInitDialog
    通过添加AfxMessageBox确定的应该没错吧, 呵呵.