我通过框架类,创建了一个非模态的对话框。想当主框架移动的时候,消息传递给对话框中的一个自定义的消息。
void CMainFrame::OnMoving(UINT fwSide, LPRECT pRect)
{
CChatDlg chatDlg; //非模态对话框类
::SendMessage(chatDlg.m_hWnd,UM_TRY,0,0); //UM_TRY是我在对话框类中自定义的消息
}现在的问题是,单步运行到SendMessage时,chatDlg.m_hWnd为什么没有值呢??
void CMainFrame::OnMoving(UINT fwSide, LPRECT pRect)
{
CChatDlg chatDlg; //非模态对话框类
::SendMessage(chatDlg.m_hWnd,UM_TRY,0,0); //UM_TRY是我在对话框类中自定义的消息
}现在的问题是,单步运行到SendMessage时,chatDlg.m_hWnd为什么没有值呢??
你只定义一个对象,但是根本没create。明白了?
::SendMessage(chatDlg.m_hWnd,UM_TRY,0,0); //UM_TRY是我在对话框类中自定义的消息 对话框类 应该定义成这个主框架的成员m_chatDlg,按如下:
::SendMessage(m_chatDlg.GetSafeHandle(),UM_TRY,0,0);
CChatDlg chatDlg; 只不过是创建了一个对象,而这个对象还没有创建出对话框窗体。必须在
chatDlg.DoMadol()或者 chatDlg.Create()之后,对话框才会有句柄。
m_chatDlg.GetSafeHwnd(),这个函数的安全性是:
假如你用的不是对象,而是一个对象指针时,例如:
CDialog * m_chatDlg=NULL;
这个时侯你使用m_chatDlg->m_hWnd。就会出现错误。
而使用m_chatDlg->GetSafeHwnd(),就比较安全。会返回一个NULL.
{
CChatDlg chatDlg; //非模态对话框类
::SendMessage(chatDlg.m_hWnd,UM_TRY,0,0); //UM_TRY是我在对话框类中自定义的消息
} =================
关键在于,CChatDlg chatDlg;这个是你在上面这个函数定义的一个对话框类变量,你在视图类中应该也创建了一个非模态对话框,这里的chatDlg和那个已经显示出来的对话框没有关系,你应试发给在视图类中定义的对话框类变量。
你的代码写的不对。