注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
lb8820265的个人空间 https://home.eeworld.com.cn/space-uid-527961.html [收藏] [复制] [分享] [RSS]
日志

串口示波器教程(4.1)SendMessage消息传递

热度 1已有 2391 次阅读2015-7-21 20:08 |个人分类:MFC| 串口, 示波器

如果示波器控件没有放在另外的对话框上,那么这个过程可以略过。

       通常父窗口与子窗口之间信息的传递一般用SendMessage。采用消息。当然还有就是建一个新类,然后在新类中调用。先用SendMessage吧。

1,接着前面的程序首先注释掉SetTimer(1,100,NULL); 在头文件IPlotX.h中增加一个自定义消息宏:#define GET_STRUCT WM_USER+100

2,接着声明全局结构体变量:

struct SendStruct

{

      int CH1;

      int CH2;

      int CH3;

      int CH4;

};

图如下:

3IPlotX.hAFX_MSG块中说明消息处理函数

afx_msg LRESULT GetStruct(WPARAM wparam,LPARAM lparam);

图如下:

4IPlotX.cpp的消息块中,使用ON_MESSAGE宏指令将消息映射到消息处理函数中:

       ON_MESSAGE(GET_STRUCT,GetStruct)

图如下:

在示波器面板上拖入一个编辑框,ID就默认为IDC_EDIT1用来显示接收到的数字,然后在IPlotX.cpp添加实现消息函数:

LRESULT iPlotX::GetStruct(WPARAM wparam,LPARAM lparam)

{

      SendStruct* ss=(SendStruct*)wparam;

      CString str;

      str.Format("%d,%d,%d,%d",ss->CH1,ss->CH2,ss->CH3,ss->CH4);

      CEdit* edit1=(CEdit*)GetDlgItem(IDC_EDIT1);

      edit1->SetWindowText(str);

 

  m_iPlotX.GetChannel(0).AddXY(XValue, ss->CH1 );

  m_iPlotX.GetChannel(1).AddXY(XValue, ss->CH2);

  m_iPlotX.GetChannel(2).AddXY(XValue, ss->CH3);

  m_iPlotX.GetChannel(3).AddXY(XValue, ss->CH4);

  XValue = XValue + 1;

  free(ss);

 return 0;

}

图如下:

发送消息,在串口显示面板上面拖入一个按钮其标题改为“测试”,双击为其添加如下函数:

       SendStruct *ss = (SendStruct *)malloc(sizeof(SendStruct));

ss->CH1=(rand()/(double)RAND_MAX)*50;

ss->CH2=ss->CH1+10;

ss->CH3=ss->CH1+20;

ss->CH4=ss->CH1+30;

::SendMessage(dlg->GetSafeHwnd(),GET_STRUCT,(WPARAM)(ss),0);

图如下:

编译运行,在打开示波器器面板后每按一下测试键在示波器上就显示一个点,效果图如下:

程序源代码为LB-2

发表评论 评论 (1 个评论)
回复 eric_wang 2015-7-23 10:25
谢谢分享

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章