MFC updatedata在线程中不能应用的解决方法

查过好多方法,以下是我采取的可以实现的方法:

1.//定义用户消息,不可与系统消息冲突,所以就这样定义  
  //WM+USER表示用户消息,加100还是加其他值并没多大区别的  
#define WM_MYUPDATEDATA WM_USER+100  

2.关联自定义消息:

在BEGIN_MESSAGE_MAP添加消息映射:

 ON_MESSAGE(WM_UPDATEDATA, OnUpdateData)

3.定义消息处理函数:LRESULT CDlg::OnUpdateData(WPARAM wParam, LPARAM lParam)
{
 UpdateData(wParam);
 return 1;

} 4.在线程中发送消息:    

首先获取主窗口的指针     CDlg* pdlg = (CDlg*)dlg;    

SendMessage(pdlg ->m_hWnd, WM_UPDATEDATA, FALSE, FALSE); 

如果采用以上的sendmessage,会提示说"error C2660: “CWnd::SendMessageA”: 函数不接受 4 个参数"

如果删除SendMessage中的一个参数,则会提示说“error C2664: “CWnd::SendMessageA”: 不能将参数 1 从“HWND”转换为“UINT””。怎么改正都不对,后来在同学的帮助下,采用以下方法。

改正方法如下:

pDlg->SendMessage(WM_MYUPDATEDATA, FALSE,FALSE);

完成,该方法可以解决在线程中直接调用UpdateData产生错误的问题.


也就是说在写完第1、2、3步后,在线程中需要updatedata(false)或者updatedata(true)的时候,都能用上面的sendmessage来代替,一句话搞定。

你可能感兴趣的:(线程,mfc,updatedata)