作业是这样的
公元3000年……
人类已经不再满足于仅仅在小小的太阳系中东逛西逛,稍微大一点的银河系也没有什么地方可去了。国际航空航天总署(International Aeronautics and Space Administration, IASA)已经决定在可以预见的时间内开始探索银河系外的宇宙空间。前不久,IASA派出了一艘飞往“金河系”的太空船。金河系是位于银河系外的另一个星系,它比银河系大很多。科学家们已经拥有充分理由相信金河系中有比人类更为高级的生命形式存在。如果能够找到并联络上它们,人类的科技将得到飞跃式的发展,当然,也有可能是完全相反的结果。不管怎样,这艘代号为“小强”的飞船已经启程了……
不幸的是,昨天,IASA控制中心与小强号失去了联系……幸运的是,小强号是一艘无人驾驶飞船。
不久,IASA控制中心收到了小强号的求救信号……完备的求救系统在飞船遭遇毁灭性故障时,向IASA控制中心发出了求救信号。
故障原因是什么?是飞船本身的问题,还是遇到了星际海盗?IASA必须尽快找到答案。于是,IASA准备与小强号的主计算机接驳,取得小强号的系统信息。工程师们根据这些信息可以准确地分析出事故的原因,从而制定营救计划。
方案是十分完美的,但还是有一点小问题。由于设计小强号的工程师已于前天被派往月球勘探石油去了,IASA的控制中心现在并没有能与小强号的主计算机接驳的软件。时间紧迫,IASA的主任老姜同志找到了你,希望你能帮IASA设计一个能与小强号的主计算机接驳的探测器软件。
现在,我们用一个DLL文件模拟小强号,这个DLL可导出一个名为CSpaceShip的类,此类有以下方法:
方法定义 说明
BOOL Connect(int iFreq, HWND hReceiver); 连接小强号的主计算机返回TRUE表示连接成功返回FALSE表示连接失败参数iFreq为连接频率,可任意赋值参数hReceiver为接收消息的窗口句柄,当连接成功后,小强号的主计算机将把系统日志以消息的方式发送给窗口。
void Disconnect(); 与小强号的主计算机断开连接在离开小强号之前,请一定要断开连接
BOOL Connected(); 得到与小强号主计算机的连接状态返回TRUE表示已经连上返回FALSE表示未连接上
在成功连接小强号的主计算机后,调用方将不定时地收到以下消息:
消息ID WPARAM参数内容 LPARAM参数内容
PROBE_LOG小强号内部日志 类型为unsigned int日志记录时间(距系统启动的分钟数) 类型为const char *日志内容
PROBE_STATE小强号设备状态 类型为struct device_state *其定义请查看SpaceShip.h文件设备状态信息 类型为const char *父设备的名称
PROBE_POSITION小强号当前所在坐标 类型为intX坐标 类型为intY坐标
PROBE_CODE编码 类型为int编码的低位 类型为int编码的高位
PROBE_END数据结束消息 无意义,忽略 无意义,忽略
收到不同的消息之后,你的程序应该有不同的操作:
消息ID 操作
PROBE_LOG小强号内部日志 在一个多行编辑框中追加以下格式的文字:[日志记录时间] 日志内容如果这个多行编辑框变成了一个分两列(这两列分别为日志记录时间和日志内容)的列表控件(此时你不需要同时实现多行编辑框),你将获得2分的加分。如果你在列表控件中实现了点击日志记录时间列的表头将日志记录时间排序的功能(按一下是升序,再按一下是降序,以此类推,就像在Windows资料管理器里一样),你将再获得3分的加分。
PROBE_STATE小强号设备状态 请将状态为“正常”的设备加到一个列表框中,状态为“停止”的设备加到另一个列表框中。如果你实现的是以下的界面,你将获得5分的加分(此时你不需要同时实现上述两个列表框):用树型控件表示设备结构图,树型控件的每个结点表示一个设备,结点的文字格式为:设备名称[正常/停止]。如果你给每个结点都添加了小图标(就像后面第二个图中画的那样),你将再获得2分的加分。
PROBE_POSITION小强号当前所在坐标 在一个静态文本控件中按照以下格式显示坐标:(X坐标, Y坐标)如果你收到多条此消息,显示最后一次收到的坐标。
PROBE_CODE编码 由于你的安全级别太低,所以你无权知道编码的含义,所以你只需将编码的高位与低位连接到一起(高位在左,低位在右),再将连接好的编码加到一个列表框中。 
PROBE_END数据结束消息 断开与小强号主计算机的连接
你将得到一个完整的MFC对话框程序的工程,里面已经关联好DLL文件,也就是说,在这个工程里,你可以像使用普通类一样使用DLL文件里的类,所有的设置已经预先做好了。如果你能够自己建立一个新的MFC对话框程序的工程(将它命名为Probe),并配置好DLL文件中类的导出,你可以获得5分的加分。
另外,你还可以得到用于模拟小强号的DLL文件,以及对应的LIB文件和H文件。如果你不打算自己建立新的工程,这三个文件可以被忽略,因为在上述工程中已经恰当地包含和配置了这三个文件。
小强号发消息的顺序是不可预知的,但你的程序收到的最后一条消息肯定是PROBE_END消息,此时你的程序应该断开与小强号的连接。两条消息到达的间隔时间为0.5秒至1.5秒。
    我们学C++的时候根本就没讲MFC,现在让我们做这么难的,小弟实在不会啊,哪位大哥能帮帮我啊!!
有人愿意的话加我QQ227330426,我把老师给的东西传给他.

解决方案 »

  1.   

    像讲故事一样,不过大多是MFC基础性东西;
    楼主可以边看边学,肯定有所收获
      

  2.   

    class CSpaceShip
    {
    public:
        BOOL Connect(int iFreq, HWND hReceiver);
        void Disconnect();
        BOOL Connected();........太费脑力了,将这个程序写完得死100000000个脑细胞估计得,这么麻烦的事情我才不干呢
      

  3.   

    大多数都是C++的基础知识啦,还有一小部份MFC的消息机制,题目说的其实很简单的呀,自己做做试试呗,有不明白的地方再来问
      

  4.   

    这个老师已经写好了的
    class PROBEDLL_API CSpaceShip  
    {
    public:
    BOOL Connected();
    void Disconnect();
    BOOL Connect(int iFreq, HWND hReceiver);
    CSpaceShip();
    virtual ~CSpaceShip();
    private:
    void WriteLog(const char *strLog);
    BOOL m_bConnected;
    HWND m_hWnd;
    HANDLE m_hData;
    int m_iFreq;
    };
      

  5.   

    我就是不明白MFC的消息机制啊,要真的是C++就好了
      

  6.   

    我在界面上添加了list box控件,我要怎么样才能在里面输入信息啊?还有一个list box我要插入树型结构,要怎么弄啊?
      

  7.   

    有意思,[email protected]
    不过我不会把结果直接给你的,作业要自己做。