1.定义一个消息 #define WM_UPDATE_MESSAGE (WM_USER+200)
//为了防止用户定义的消息ID与系统的消息ID冲突,MS(Microsoft)定义了一个宏WM_USER,小于WM_USER的ID被系统使用,大于WM_USER的ID被用户使用
2.定义消息映射
BEGIN_MESSAGE_MAP(CCServerDlg, CDialog) //CCServerDlg为对应的主窗口程序
//{{AFX_MSG_MAP(CCServerDlg)
...
ON_MESSAGE(WM_UPDATE_MESSAGE, OnUpdateMessage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
3. 定义消息处理函数
// Generated message map functions
//{{AFX_MSG(CCServerDlg)
...
afx_msg LRESULT OnUpdateMessage(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
4. 完成函数内容,只需调用UpdateData()即可
LRESULT CXXXDlg::OnUpdateMessage(WPARAM wParam, LPARAM lParam)
{
UpdateData(FALSE);//或者UpdateData(TURE)
return 0;
}
5.线程中的调用
UINT CXXXDlg::ClientThread(LPVOID lpParam)
{
CXXXDlg *pt=(CCServerDlg*)CWnd::FromHandle(((CCServerDlg*)lpParam)->m_hWnd);//get the handle topost message
pt->PostMessage(WM_UPDATE_MESSAGE,0,0);//OK - UpdateDate
//message sended to "pt"
...
}
6.程序中调用
// CWinThread* pThread;
// static UINT ClientThread(LPVOID lpParm);
void CCServerDlg::OnSStart()
{
...
pThread=AfxBeginThread(ClientThread,this);
...
}
///////////////////////////例子////////////////////////
1、
#define WM_UPDATE_MESSAGE (WM_USER+200)
2、
BEGIN_MESSAGE_MAP(CPMAgentManageDlg, CDialog)
//{{AFX_MSG_MAP(CPMAgentManageDlg)
ON_MESSAGE(WM_UPDATE_MESSAGE, OnUpdateMessage) //////////////////加的
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
3、
在PMAgentManageDlg.h文件中
// Generated message map functions
//{{AFX_MSG(CPMAgentManageDlg)
afx_msg LRESULT OnUpdateMessage(WPARAM wParam, LPARAM lParam);///////////加的
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
4、
在.cpp中完成函数内容
LRESULT CPMAgentManageDlg::OnUpdateMessage(WPARAM wParam, LPARAM lParam)
{
UpdateData(TRUE);
return 0;
}
5、
在线程中要用到updatedata的地方添加
CPMAgentManageDlg *pt=(CPMAgentManageDlg*)CWnd::FromHandle(((CPMAgentManageDlg*)lParam)->m_hWnd);//
pt->PostMessage(WM_UPDATE_MESSAGE,0,0);
现在就可以直接使用UpdateData了
Updatedata(TRUE) == 将控件的值赋值给成员变量;
Updatedata(FALSE) == 将成员变量的值赋值给控件