开发环境: WinCE 5.0 EVC 4.0
自己定义的user message, cdoc中起了一个新的thread,这个thread负责获取新的数据。为了不阻碍数据获取的执行,获取数据后,考虑将数据发送给主UI thread去显示。Cview的代码都是在主UI thread中的。所以相当于Cdoc中的起的thread send 或者post message 到Cview. 定义了用户message WM_UPDATEDATA, 在Cview中添加了Message mapping和对用的on响应方法。
但是试了很多方式都失败 如:
SendMessageW((HWND)pDoc->pDemoView, WM_UPDATEDATA, 0,0);
PostMessage((HWND)pDoc->pDemoView, WM_UPDATEDATA, 0,0);
PostThreadMessage(AfxGetApp ()->m_nThreadID , WM_UPDATEDATA, 0,0);
同样的语句,如果放在cview中调用,是没有问题的,证明message mapping什么的都是正确的。
最后找到这个答案stackoverflow上的 点击打开链接
核心是“pView->PostMessage(msg, wParam, lParam);
”
不清楚为什么用成员函数这种调用方式就成功,但是用4个parameter的直接调用方式失败。
注:1.这里的Cview OnCreat时,会调用Cdoc的方法,把自己的handle 传给Cdoc的成员变量 pDemoView.
2. CmyDoc起数据获取thread时,把自己的handle pDoc作为参数传入。