热度 1||
通常父窗口与子窗口之间信息的传递一般用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;
};
图如下:
3在IPlotX.h中的AFX_MSG块中说明消息处理函数 :
afx_msg
LRESULT GetStruct(WPARAM wparam,LPARAM lparam);
图如下:
4在IPlotX.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。