在线程中获得一个对话框的句柄,再通过发送消息传递给一个主对话框有有关问题,大家帮忙啊
在线程中获得一个对话框的句柄,再通过发送消息传递给一个主对话框有问题,大家帮忙啊!
线程中发送的消息:
CChatDialog* oldChatDialog = (CChatDialog*)lanCommDlg-> FromHandle(pWnd);
::PostMessage(lanCommDlg-> m_hWnd,WM_FRIENDMSG,(WPARAM)oldChatDialog, (LPARAM)recvBuff);
消息处理函数:(前提,消息路由正确)
void CLanCommunicationDlg::OnFriendMsg(WPARAM wParam,LPARAM lParam)
{
//创建新的聊天对话框
CChatDialog* chatDialog = (CChatDialog*)wParam;
CString recvData = (char*) lParam;
if (chatDialog-> m_exist == false)
{
chatDialog-> Create(IDD_MSG_HANDLE,this);
m_commTree.m_ipAll.Add(chatDialog-> m_chatIP);
m_commTree.m_nameAll.Add(chatDialog-> m_chatName);
CString windowText = "您正在与 ";
windowText += m_commTree.GetItemText(m_commTree.GetSelectedItem());
windowText += "聊天中! ";
chatDialog-> SetWindowText(windowText);
chatDialog-> ShowWindow(SW_SHOW); //非模态的对话框一定要自己显示
// chatDialog-> SetWindowPos(NULL,0,0,0,0,SWP_SHOWWINDOW);
chatDialog-> m_exist = true;
}
CString editData;
chatDialog-> GetDlgItemText(IDC_RECV_MSG,editData);
editData = /*chatDialog-> m_chatIP + "说 " +*/ "\r\n " + recvData + "\r\n ";
chatDialog-> SetDlgItemText(IDC_RECV_MSG,editData);
m_commTree.Expand(m_root,TVE_EXPAND);
}
这样程序运行时就会死,不知道怎么回事!
------解决方案--------------------
CChatDialog* oldChatDialog = (CChatDialog*)lanCommDlg-> FromHandle(pWnd);
::PostMessage(lanCommDlg-> m_hWnd, WM_FRIENDMSG, (WPARAM)oldChatDialog, (LPARAM)recvBuff);
不觉得画蛇添足吗?
线程中发送的消息:
CChatDialog* oldChatDialog = (CChatDialog*)lanCommDlg-> FromHandle(pWnd);
::PostMessage(lanCommDlg-> m_hWnd,WM_FRIENDMSG,(WPARAM)oldChatDialog, (LPARAM)recvBuff);
消息处理函数:(前提,消息路由正确)
void CLanCommunicationDlg::OnFriendMsg(WPARAM wParam,LPARAM lParam)
{
//创建新的聊天对话框
CChatDialog* chatDialog = (CChatDialog*)wParam;
CString recvData = (char*) lParam;
if (chatDialog-> m_exist == false)
{
chatDialog-> Create(IDD_MSG_HANDLE,this);
m_commTree.m_ipAll.Add(chatDialog-> m_chatIP);
m_commTree.m_nameAll.Add(chatDialog-> m_chatName);
CString windowText = "您正在与 ";
windowText += m_commTree.GetItemText(m_commTree.GetSelectedItem());
windowText += "聊天中! ";
chatDialog-> SetWindowText(windowText);
chatDialog-> ShowWindow(SW_SHOW); //非模态的对话框一定要自己显示
// chatDialog-> SetWindowPos(NULL,0,0,0,0,SWP_SHOWWINDOW);
chatDialog-> m_exist = true;
}
CString editData;
chatDialog-> GetDlgItemText(IDC_RECV_MSG,editData);
editData = /*chatDialog-> m_chatIP + "说 " +*/ "\r\n " + recvData + "\r\n ";
chatDialog-> SetDlgItemText(IDC_RECV_MSG,editData);
m_commTree.Expand(m_root,TVE_EXPAND);
}
这样程序运行时就会死,不知道怎么回事!
------解决方案--------------------
CChatDialog* oldChatDialog = (CChatDialog*)lanCommDlg-> FromHandle(pWnd);
::PostMessage(lanCommDlg-> m_hWnd, WM_FRIENDMSG, (WPARAM)oldChatDialog, (LPARAM)recvBuff);
不觉得画蛇添足吗?