您的位置:首页 > 其它

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

2016-09-09 15:29 330 查看

目的:通过在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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐