自定义消息向编辑框发数据,数据显示不出来,该怎么处理
自定义消息向编辑框发数据,数据显示不出来
建立一个线程,测试了一下,线程建立成功了。
线程里面:CProjectSWDlg *pdlg=(CProjectSWDlg*)p;
::SendMessage(pdlg->m_hWnd,WM_THREAD, (WPARAM)&Hand.GetAt(0),0); //发送的是局部变量
自定义消息:void CProjectSWDlg::OnThread(WPARAM wParam, LPARAM lParam)
{
CString *str;
str=(CString*)wParam;
SetDlgItemText(IDC_SHOWDATA,*str);
}
运行时,出错,单步调试了一下,显示access violation,好像是内存访问非法,但我不知道是那出错了?
------解决方案--------------------
::SendMessage(pdlg->m_hWnd,WM_THREAD, (WPARAM)Hand.GetAt(0),0);
自定义消息:void CProjectSWDlg::OnThread(WPARAM wParam, LPARAM lParam)
{
CString str((CHAR*)wParam);
SetDlgItemText(IDC_SHOWDATA,str);
}
------解决方案--------------------
建立一个线程,测试了一下,线程建立成功了。
线程里面:CProjectSWDlg *pdlg=(CProjectSWDlg*)p;
::SendMessage(pdlg->m_hWnd,WM_THREAD, (WPARAM)&Hand.GetAt(0),0); //发送的是局部变量
自定义消息:void CProjectSWDlg::OnThread(WPARAM wParam, LPARAM lParam)
{
CString *str;
str=(CString*)wParam;
SetDlgItemText(IDC_SHOWDATA,*str);
}
运行时,出错,单步调试了一下,显示access violation,好像是内存访问非法,但我不知道是那出错了?
------解决方案--------------------
::SendMessage(pdlg->m_hWnd,WM_THREAD, (WPARAM)Hand.GetAt(0),0);
自定义消息:void CProjectSWDlg::OnThread(WPARAM wParam, LPARAM lParam)
{
CString str((CHAR*)wParam);
SetDlgItemText(IDC_SHOWDATA,str);
}
------解决方案--------------------
- C/C++ code
自定义消息:void CProjectSWDlg::OnThread(WPARAM wParam, LPARAM lParam) { CString* pStr = (CString*) wParam; CEdit* pEdit = (CEdit *) GetDlgItem(IDC_SHOWDATA); pEdit->SetWindowText(*pStr); }
------解决方案--------------------
WPARAM参数必须传堆里的,传栈里的肯定不行.但这样会给回收带来麻烦,甚至无法控制.
最好是先用WM_COPYDATA把WPARAM的值用LPARAM先送过去,然后发送WM_THREAD时,就不需要带参数了,接收方直接使用WM_COPYDATA传过来的值.
------解决方案--------------------
如果::SendMessage(pdlg->m_hWnd,WM_THREAD, (WPARAM)&Hand.GetAt(0),0);出错的话,那么你应该检查一下pdlg->m_hWnd是不是有效,同时应该保证前面的p的值是正确的。