码迷,mamicode.com
首页 > 编程语言 > 详细

导航程序调试1---MFC应用以及数据显示程序

时间:2015-08-04 02:01:41      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:

  1. 问题

    error?C2664:?"BuildCommDCBW":?不能将参数?1?从"char?*"转换为"LPCWSTR"经常出现这样的错误?

    ?

    对于上面的错误,主要是字符编码设置的问题,修改下面的选项即可:

    技术分享

    http://bbs.csdn.net/topics/310076558 这篇帖子里面有解决方案.

    不能想当然的,就做强制转换,不然可能会出错。下面的做法是错误的。

    技术分享

    正确的解决方案:

    技术分享

    类似下面这种:

    技术分享

    ?

    当我们将上面的改为 支持多字符集的时候,我们需要将下面的 OpenEventW (xxxx) 改为:

    技术分享

    ?

    ?

  2. MFC当中创建线程

    参考文档: http://www.cnblogs.com/mx113/archive/2009/12/03/1616445.html 使用MFC中的AfxBeginThread创建多线程

    ?

    用户界面线程和工作线程区别:继承主用户界面进程。

    ?

    ?

    ?

    error C2248: "CObject::operator =": 无法访问 private 成员(在"CObject"类中声明)

    ?

    参考资料: http://blog.csdn.net/cxf7394373/article/details/12389507 这种对控件操作的对象最好都声明成指针

    ?

    多线程中,数据传递:通过消息机制实现。

    下面这个解释和android当中控件必须在子线程当中的解释几乎一致。

不要在线程函数体内操作MFC控件,因为每个线程都有自己的线程模块状态映射表,在一个线程中操作另一个线程中创建的MFC对象,会带来意想不到的问题。更不要在线程函数里,直接调用UpdataData()函数更新用户界面,这会导致程序直接crash。而应该通过发送消息给主线程的方式,在主线程的消息响应函数里操作控件。

不过,我们虽然不能对控件进行操作,但是我们还是可以操作主界面的。

我们完全可以通过获取 AfxGetApp() -> m_pMainWnd -> GetDC(); 来与主窗体进行联系。

但是如何联系里面的控件? 目前还没有好的方法。不过,我觉得肯定是有方法的。

  1. 如何对MFC当中的EDIT控件进行操作。

    这里我们需要通过EDIT控件的ID进行操作。通过其ID我们可以得到很多东西。

    参考文章:http://blog.csdn.net/jiayanhui2877/article/details/7589756 MFC Edit控件操作

  2. 一定要控制好,昨天闲来没事,改了一个字节,把 unsigned short 改为 unsigned int .折腾好久才搞定。后来,竟然是我自己程序出错。我也是无语了。

  3. 技术分享

    左边是C++版本,真是丑。右边是C#版本。

    遇到的问题颇多,下面说说整体结构。

    ?

    程序在主线程,也就是 下面这个地方进行开辟2个新的线程进行数据处理:

    技术分享

    上面的代码涉及到 EDIT控件的设置问题,我们可以联想到android当中eidtview的设置问题,其实还是蛮像的。

    当我们在子线程中,想要获取到主线程的东西的话,比较麻烦,可以通过得到其上下文的方式来进行操作。

    技术分享

    如上图的代码就是这样一回事。

    当然,这里就涉及到数据通讯的问题。以及数据共享的问题。

    还有就是主线程一般是用户界面线程,它有消息循环队列,而我们创建的工作线程中没有这种工作机制。

    所以,一般我们想要更新主线程当中的控件的时候,我们一般通过消息队列去通知主线程,然后让主线程去绘制窗体。

    毕竟,我们执行程序的时候,所有的东西都是"被实例化的"

    ?

    ?

    ?

    继续接上面的开了两个线程之后,怎么办?

    ?

    线程1:

    技术分享

    虚拟总线初始化,等待用户输入,输入0K之后,我们进入到数据采集部分。

    还有就是m_run 是由主线程提供的。

    技术分享

    ?

    ?

    线程2:处理线程

    技术分享

    处理线程,专门处理子线程1当中采集到的数据,这里我们用了循环数组来进行线程间的通讯。采集完之后,我们直接显示即可。

    在用画笔绘制图形的过程中,我想强调一点,适当的sleep是必须的,因为绘制需要时间,不然上一个图形还没绘制完,新图形又过来了,

    这样会造成界面的卡顿十分严重。

    ?

    两个主要的程序代码:

    Dlg.h

    ?

    ?

    Dlg.cpp

    ?

  4. 参考资料:

http://blog.csdn.net/lesky/article/details/2470907 MFC应用程序的初始化过程

构造全局对象CWinApp è 调用WINMain中的AfxGetAPP

得到全局对象的pApp,然后调用 initInstance,并在里面完成注册,显示窗体。然后执行消息循环。

关于Mfc的好的帖子,值得一看: http://blog.csdn.net/lesky/article/details/2471039 MFC要点概括

?

?

?

导航程序调试1---MFC应用以及数据显示程序

标签:

原文地址:http://www.cnblogs.com/zhuxuekui/p/4700875.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!