MFC不能用UpdateData的解决方法

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) == 将成员变量的值赋值给控件
 
 
 

你可能感兴趣的:(wx)