解决 Updatedata不能更新、报错问题。(主要是不同的类、线程中出现的)

目的:通过在A对话框(对应A类)中点击按钮控制B对话框(对应B类)的更新(利用Updatedata函数)。

情况1:在A类中使用的Updatedata()只能更新此类(该类指的是此Updatedata()使用的类)的数据,不能更新B类中的数据;反之,在B类中使用Updatedata(),只能更新B类,不会更新A类中数据。
情况2:在B类中定义函数UD(),其函数体包含Updatedata(),那我在A类中通过对象或静态函数调用UD()函数可行吗?
不可行!通过定义B类的对象,调用UD()函数,生成无误,但运行时,会报错,因Updatedata()不能跨线程、跨类调用通过设置UD()为静态函数,在A类中使用该函数,生成报错,显示“Updatedata()”不能被静态函数调用。

 

解决办法:在A类中通过对B对话框发送消息来调用B类中的函数UD()(注,此函数中包含Updatedata函数),达到在A对话框中控制B的更新问题。

1.自定义消息:

第一步:定义消息。Microsoft推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息。即:

             在B类的头文件中加入:

             #defineWM_UPDATEDATA 10000+1 //自定义消息,更新界面

第二步:实现消息处理函数。该函数使用WPRAM和LPARAM参数并返回LPESULT类型(返回长整形结果)。即:   

             在B类的.cpp文件中加入函数定义:

             LRESULTCTianDiTongXun_CView_R::OnUpdateData(WPARAM wParam, LPARAM lParam)

             {

             UpdateData(wParam);

             return0;

             }

第三步:在类头文件的AFX_MSG块中说明消息处理函数,即

             在头文件的声明中的public中加入:

             LRESULTOnUpdateData(WPARAM wParam, LPARAM lParam);//声明函数

第四步:在用户类的消息块中,使用ON_MESSAGE宏指令将消息映射到消息处理函数中。即:

             在B类的.pp文件中添加消息映射函数(即在BEGIN_MESSAGE_MAP()与END_MESSAGE_MAP()中间加入下面代码):

             ON_MESSAGE(WM_UPDATEDATA, OnUpdateData)

2.在相应的按钮中利用此自定义消息:     

    在A类b1按钮(自己根据功能可以任意选择)的函数中加入以下代码:

CMainFrame* pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd;//将主窗口的指针赋给pMF;
    CTianDiTongXun_CView*pViewRes=(CTianDiTongXun_CView*)pMF->m_wndSplitter.GetPane(0,1);//将B对话框的指针赋给pViewRes;
    pViewRes->SendMessage(WM_UPDATEDATA, FALSE);//给B对话框发送更新信息。
说明:

       A类为:CTianDiTongXun_CView;B类为:CTianDiTongXun_CView_R。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值