LRESULT SendMessage( HWND hWnd, // handle to destination window UINT Msg, // message WPARAM wParam, // first message parameter,消息的第一个参数 LPARAM lParam // second message parameter,消息的第二个参数, );注意1:传递的到底是什么?是字符串,int数据,指针?
实例一,发送char[]字符串
发送Message:
void CDlg2::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
char s0[]="123456FEDBCA\r\n"; //需要传递的变量可以是此函数的局部变量也可以是工程的全局变量
// 通过第一个参数或者第二个参数传递都OK
::SendMessage(pMainFrame->pDlg4->m_hWnd, UM_MESSAGE_EDIT_ADD_STRING, 0, (LPARAM)s0); // OK
// ::SendMessage(pMainFrame->pDlg4->m_hWnd ,UM_MESSAGE_EDIT_ADD_STRING,(WPARAM)&s0,0); // OK
// 运用PostMessage 还未测试,据说不同,只能用全局变量,因为POST完之后不会等待消息处理完再进入下一步;而Send会
// 等待消息处理完之后再进行下一步,因此系统在这短时间内不会将本函数内的变量销毁。本人会继续验证PostMessage的功能。
// ::PostMessage(pMainFrame->pDlg4->m_hWnd, UM_MESSAGE_EDIT_ADD_STRING, 0, (LPARAM)s1);
}
接收处理Message:
LRESULT CDlg4::OnMsgAddString(WPARAM wParam, LPARAM lParam)
{int nMsgLen ;
CString str;
char *pStr0= (char *)wParam; // OK
// char *pStr0= (char *)lParam; // OK
str.Format(_T("%S"),pStr0);
nMsgLen = m_Edit.GetWindowTextLength();
m_Edit.SetSel(nMsgLen, nMsgLen);
m_Edit.ReplaceSel(*pStr1);
return TRUE;
}
实例二,发送CString字符串
发送Message:
void CDlg2::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
CString s1=_T("123456\r\n");
// CString 本身是一个类,s1为其实例对象,因此传递的时候必须是这个对象的指针,而不是这个对象。依次类推,不仅可以传递字符串,还一个传递一个自定义的结构体对象或者一个其他类的对象。
//运用第一个参数传递,OK
// ::SendMessage(pMainFrame->pDlg4->m_hWnd, UM_MESSAGE_EDIT_ADD_STRING,(WPARAM)&s1,0);
//运用第二个参数传递,OK
::SendMessage(pMainFrame->pDlg4->m_hWnd, UM_MESSAGE_EDIT_ADD_STRING, 0,(LPARAM)&s1); //OK
//::PostMessage(pMainFrame->pDlg4->m_hWnd, UM_MESSAGE_EDIT_ADD_STRING, 0, (LPARAM)s1);
}
接收处理Message:
LRESULT CDlg4::OnMsgAddString(WPARAM wParam, LPARAM lParam)
{
int nMsgLen ;
// 指针,非对象
CString *pStr1= (CString *)lParam;
nMsgLen = m_Edit.GetWindowTextLength();
m_Edit.SetSel(nMsgLen, nMsgLen);
m_Edit.ReplaceSel(*pStr1);
return TRUE;
}