none
cdialog的派生类创建一个对象,但是在调用的时候,却查到ASSERT(::IsWindow(m_hWnd));的错误。 RRS feed

  • 问题

  • 我创建了一个基于CTabCtrl的类,在类的.h文件中创建了对话框类CFastDlg的对象m_oFastDlg,在CTabCtrl的ON_NOTIFY_REFLECT(TCN_SELCHANGE, OnSelchange)事件中,使用m_oFastDlg.MoveWindow(&rc);但是跳出了异常,File:winocc.cpp  Line:279,请问,怎么回事。

    如果在MoveWindow调用前m_oFastDlg.Create(ID,this)一下,没错误,但是FastDlg对话框中的控件什么都没有了,好像FastDlg是新的一样。

    高手给解释,希望再给一个解决办法。

    2012年3月23日 13:08

答案

  • OnSelchange函数中
    if(NULL == m_oFastDlg>GetSafeHwnd())
    {
     VERIFY(m_oFastDlg.Create(....));
    }
    m_oFastDlg->ShowWindow(SW_SHOW);
    m_oFastDlg.MoveWindow(...);


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已标记为答案 神秘人 2012年3月30日 2:35
    2012年3月26日 10:20
    版主

全部回复

  • 神秘人你好! 

    目前我不能重现这个异常。我想这个异常应该和m_oFastDlg的初始化有关系。我建议你仔细调试这个程序。 在异常发生的时候,检查调用栈。

    祝你好运!


    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us


    2012年3月26日 3:58
  • OnSelchange函数中
    if(NULL == m_oFastDlg>GetSafeHwnd())
    {
     VERIFY(m_oFastDlg.Create(....));
    }
    m_oFastDlg->ShowWindow(SW_SHOW);
    m_oFastDlg.MoveWindow(...);


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已标记为答案 神秘人 2012年3月30日 2:35
    2012年3月26日 10:20
    版主
  • 非常感谢,我也是这么解决的。当时没有create就movewindow,或者show,确实不正确。我原以为在这个ctabctrl类中定义一个对话框的对象,就可以调用对话框的方法了,想错了,ctabctrl类和cdialog类不同。

    再次谢谢。

    2012年3月30日 2:38