解决 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。
相关文章推荐
- 解决listview出现线程更新错误问题
- fedora 25 升级更新内核后,开机出现:failed start load kernel modules 的解决;还有更新内核后maya viwePort2.0不能用的问题
- Linux--14:ubuntu12.04 vi不能正常使用、右上角出现红杠提醒更新出问题、网速比相同条件下windows下慢 解决方法
- .NETC#下AE二次开发过程中出现的属性表不能更新问题解决办法
- 解决自定义preference 在ActivityGroup 的包容下出现UI不能更新的问题
- Win10更新后出现vc++6.0不能用的问题解决方法
- 多线程委托之跨线程问题分析--在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke(解决方法已更新)
- Handler中更新UI,如果报错子线程不能更新UI,可能出现的问题
- .Net环境水晶报表在98下发布,出现"不能加载报表..."问题的解决
- 实现 输入框不可输入,解决 Enable,Disable 等不能更新值问题
- VS2008经过UltraISO编辑后出现 deffactory.dat等文件不能读取的问题之解决
- 安装office2007之windows installer 服务不能更新一个或多个受保护的windows文件问题解决
- 刻录光驱不能访问出现函数不正确问题解决
- 在使用SSIS设计脚本时候,出现的在PostExecute之外不能锁定变量集合进行读写访问的问题的解决
- 卡巴6.0.1.411版本升级服务器(解决地震造成的不能升级问题(12310125更新,307可以升啦))
- 执行SQL语句时出现问题操作必须使用一个可更新的查询错误的解决方法
- 我把一个VC6的工程转换为VS2008的工程后,编译总是出现找不到而且不能升级vc90.pdb文件的问题,error C2471--解决办法
- 如何解决ADO.NET访问Access数据库出现"操作必须使用一个可更新的查询"的问题
- 解决多线程操作控件时可能出现的异常:“在某个线程上创建的控件不能成为在另一个线程上创建的控件的父级”
- kjava播放视频的时候不能用线程做刷屏的操作,否则出现闪屏问题!在nokia机器上如此。。。