我通过框架类,创建了一个非模态的对话框。想当主框架移动的时候,消息传递给对话框中的一个自定义的消息。
void CMainFrame::OnMoving(UINT fwSide, LPRECT pRect) 
{
    CChatDlg chatDlg;                   //非模态对话框类
    ::SendMessage(chatDlg.m_hWnd,UM_TRY,0,0);   //UM_TRY是我在对话框类中自定义的消息
}现在的问题是,单步运行到SendMessage时,chatDlg.m_hWnd为什么没有值呢??

解决方案 »

  1.   

    CChatDlg chatDlg;  //非模态对话框类 没有Create或者DoModal,chatDlg.m_hWnd当然没有值
      

  2.   

    哎,想不到楼上还是富农呢。
    你只定义一个对象,但是根本没create。明白了?
      

  3.   

    我在视类中,已经Creat,创建了一个对话框了。那怎么办?还要框架类在发送消息之前,在创建一个么??
      

  4.   

    你已经在视类中创建,那可以把在视类中创建(保存起来)的传给sendmessage就行了,
      

  5.   

        CChatDlg chatDlg;                  //非模态对话框类 
        ::SendMessage(chatDlg.m_hWnd,UM_TRY,0,0);  //UM_TRY是我在对话框类中自定义的消息 对话框类 应该定义成这个主框架的成员m_chatDlg,按如下:
    ::SendMessage(m_chatDlg.GetSafeHandle(),UM_TRY,0,0); 
      

  6.   

    写错了,应该是m_chatDlg.GetSafeHwnd()
      

  7.   

    你说的这些没用,他的问题在于,
    CChatDlg chatDlg;   只不过是创建了一个对象,而这个对象还没有创建出对话框窗体。必须在
    chatDlg.DoMadol()或者 chatDlg.Create()之后,对话框才会有句柄。
      

  8.   

    我是10楼,补充一下:
    m_chatDlg.GetSafeHwnd(),这个函数的安全性是:
    假如你用的不是对象,而是一个对象指针时,例如:
    CDialog * m_chatDlg=NULL;
    这个时侯你使用m_chatDlg->m_hWnd。就会出现错误。
    而使用m_chatDlg->GetSafeHwnd(),就比较安全。会返回一个NULL.
      

  9.   

    void CMainFrame::OnMoving(UINT fwSide, LPRECT pRect) 

        CChatDlg chatDlg;                  //非模态对话框类 
        ::SendMessage(chatDlg.m_hWnd,UM_TRY,0,0);  //UM_TRY是我在对话框类中自定义的消息 
    } =================
    关键在于,CChatDlg chatDlg;这个是你在上面这个函数定义的一个对话框类变量,你在视图类中应该也创建了一个非模态对话框,这里的chatDlg和那个已经显示出来的对话框没有关系,你应试发给在视图类中定义的对话框类变量。
      

  10.   

    那就好好检查一下CChatDlg 这个类的定义有没有问题.
      

  11.   

    非模态对话框先要new,再create,要显示的话再show出来。
    你的代码写的不对。