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来代替,一句话搞定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值