建立了一个对话框类Dialog2,Dialog2.h中声明了消息处理函数:
afx_msg LONG OnCommunication(WPARAM ch, LPARAM port);Dialog2.cpp中定义消息映射:BEGIN_MESSAGE_MAP(Dialog2, CDialog)
//{{AFX_MSG_MAP(Dialog2)
ON_MESSAGE(WM_COMM_RXCHAR, OnCommunication)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_OFP_INSTRUCT, OnOfpInstruct)
ON_BN_CLICKED(IDC_SAVE_LOG, OnSaveLog)
ON_BN_CLICKED(IDC_SELECT_ALL, OnSelectAll)
ON_BN_CLICKED(IDC_OFP_TEST, OnOfpTest)
ON_BN_CLICKED(IDC_MCARD_TEST, OnMcardTest)
ON_BN_CLICKED(IDC_ICC_TEST, OnIccTest)
ON_BN_CLICKED(IDC_RFIC_TEST, OnRficTest)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()LONG Dialog2::OnCommunication(WPARAM ch, LPARAM port)
{
AfxMessageBox("communicated!");
return 0;
}OnCommunication函数是响应串口收到的字符,运行的时候也用bushound监控了串口数据:
Bus Hound 5.00 capture. Complements of www.perisoft.net Device - Device ID (followed by the endpoint for USB devices)
(18) 通讯端口 (COM1)
Phase - Phase Type
DI Data in
DO Data out
Data - Hex dump of the data transferred
Descr - Description of the phase
Cmd... - Position in the captured data
Device Phase Data Description Cmd.Phase.Ofs(rep)
------ ----- ------------------------ ---------------- ------------------
18 DO 1b 79 1b 78 36 30 30 33 .y.x6003 1.1.0
31 37 30 32 30 30 37 36 17020076 1.1.8
03 . 1.1.16
18 DI 36 6 2.1.0
18 DI 30 0 3.1.0(2)
18 DI 31 1 5.1.0
18 DI 30 0 6.1.0(2)
18 DI 36 6 8.1.0
18 DI 31 1 9.1.0
18 DI 03 . 10.1.0
18 DO 36 30 30 33 31 37 30 30 60031700 11.1.0
34 35 33 31 03 4531. 11.1.8
18 DI 36 6 12.1.0
18 DI 30 0 13.1.0(2)
18 DI 32 2 15.1.0
18 DI 30 0 16.1.0(2)
18 DI 34 4 18.1.0
18 DI 35 5 19.1.0
18 DI 32 2 20.1.0
18 DI 37 7 21.1.0
18 DI 03 . 22.1.0
18 DO 36 30 30 31 31 31 37 30 60011170 23.1.0
03 . 23.1.8
18 DI 36 6 24.1.0
18 DI 30 0 25.1.0(2)
18 DI 31 1 27.1.0
18 DI 30 0 28.1.0(2)
18 DI 36 6 30.1.0
18 DI 31 1 31.1.0
18 DI 03 . 32.1.0
18 DO 36 30 30 31 31 37 37 36 60011776 33.1.0
03 . 33.1.8
18 DI 36 6 34.1.0
18 DI 30 0 35.1.0(2)
18 DI 37 7 37.1.0
18 DI 30 0 38.1.0(3)
18 DI 34 4 41.1.0
18 DI 30 0 42.1.0
18 DI 32 2 43.1.0
18 DI 30 0 44.1.0(8)
18 DI 36 6 52.1.0
18 DI 31 1 53.1.0
18 DI 03 . 54.1.0
18 DO 36 30 30 31 31 32 37 33 60011273 55.1.0
03 . 55.1.8
18 DI 36 6 56.1.0
18 DI 30 0 57.1.0(2)
18 DI 45 E 59.1.0
18 DI 30 0 60.1.0(2)
18 DI 33 3 62.1.0
18 DI 42 B 63.1.0
18 DI 37 7 64.1.0
18 DI 38 8 65.1.0
18 DI 31 1 66.1.0
18 DI 33 3 67.1.0
18 DI 30 0 68.1.0(6)
18 DI 37 7 74.1.0
18 DI 33 3 75.1.0
18 DI 43 C 76.1.0
18 DI 38 8 77.1.0
18 DI 34 4 78.1.0
18 DI 30 0 79.1.0
18 DI 31 1 80.1.0
18 DI 33 3 81.1.0
18 DI 30 0 82.1.0(2)
18 DI 39 9 84.1.0
18 DI 30 0 85.1.0(3)
18 DI 34 4 88.1.0
18 DI 36 6 89.1.0
18 DI 03 . 90.1.0
18 DO 36 30 30 44 31 35 30 30 600D1500 91.1.0
41 34 30 34 30 30 30 37 A4040007 91.1.8
41 30 30 30 30 30 30 33 A0000003 91.1.16
33 33 30 31 30 31 34 46 3301014F 91.1.24
03 . 91.1.32
18 DI 36 6 92.1.0
18 DI 30 0 93.1.0(2)
18 DI 33 3 95.1.0
18 DI 45 E 96.1.0
18 DI 37 7 97.1.0
18 DI 36 6 98.1.0
18 DI 31 1 99.1.0
18 DI 34 4 100.1.0
18 DI 37 7 101.1.0
18 DI 41 A 102.1.0
18 DI 32 2 103.1.0
18 DI 03 . 104.1.0 很奇怪的是,明明有收到数据,却始终不弹出对话框,为什么OnCommunication函数不能得到执行呢?
求各位大侠指点!
afx_msg LONG OnCommunication(WPARAM ch, LPARAM port);Dialog2.cpp中定义消息映射:BEGIN_MESSAGE_MAP(Dialog2, CDialog)
//{{AFX_MSG_MAP(Dialog2)
ON_MESSAGE(WM_COMM_RXCHAR, OnCommunication)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_OFP_INSTRUCT, OnOfpInstruct)
ON_BN_CLICKED(IDC_SAVE_LOG, OnSaveLog)
ON_BN_CLICKED(IDC_SELECT_ALL, OnSelectAll)
ON_BN_CLICKED(IDC_OFP_TEST, OnOfpTest)
ON_BN_CLICKED(IDC_MCARD_TEST, OnMcardTest)
ON_BN_CLICKED(IDC_ICC_TEST, OnIccTest)
ON_BN_CLICKED(IDC_RFIC_TEST, OnRficTest)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()LONG Dialog2::OnCommunication(WPARAM ch, LPARAM port)
{
AfxMessageBox("communicated!");
return 0;
}OnCommunication函数是响应串口收到的字符,运行的时候也用bushound监控了串口数据:
Bus Hound 5.00 capture. Complements of www.perisoft.net Device - Device ID (followed by the endpoint for USB devices)
(18) 通讯端口 (COM1)
Phase - Phase Type
DI Data in
DO Data out
Data - Hex dump of the data transferred
Descr - Description of the phase
Cmd... - Position in the captured data
Device Phase Data Description Cmd.Phase.Ofs(rep)
------ ----- ------------------------ ---------------- ------------------
18 DO 1b 79 1b 78 36 30 30 33 .y.x6003 1.1.0
31 37 30 32 30 30 37 36 17020076 1.1.8
03 . 1.1.16
18 DI 36 6 2.1.0
18 DI 30 0 3.1.0(2)
18 DI 31 1 5.1.0
18 DI 30 0 6.1.0(2)
18 DI 36 6 8.1.0
18 DI 31 1 9.1.0
18 DI 03 . 10.1.0
18 DO 36 30 30 33 31 37 30 30 60031700 11.1.0
34 35 33 31 03 4531. 11.1.8
18 DI 36 6 12.1.0
18 DI 30 0 13.1.0(2)
18 DI 32 2 15.1.0
18 DI 30 0 16.1.0(2)
18 DI 34 4 18.1.0
18 DI 35 5 19.1.0
18 DI 32 2 20.1.0
18 DI 37 7 21.1.0
18 DI 03 . 22.1.0
18 DO 36 30 30 31 31 31 37 30 60011170 23.1.0
03 . 23.1.8
18 DI 36 6 24.1.0
18 DI 30 0 25.1.0(2)
18 DI 31 1 27.1.0
18 DI 30 0 28.1.0(2)
18 DI 36 6 30.1.0
18 DI 31 1 31.1.0
18 DI 03 . 32.1.0
18 DO 36 30 30 31 31 37 37 36 60011776 33.1.0
03 . 33.1.8
18 DI 36 6 34.1.0
18 DI 30 0 35.1.0(2)
18 DI 37 7 37.1.0
18 DI 30 0 38.1.0(3)
18 DI 34 4 41.1.0
18 DI 30 0 42.1.0
18 DI 32 2 43.1.0
18 DI 30 0 44.1.0(8)
18 DI 36 6 52.1.0
18 DI 31 1 53.1.0
18 DI 03 . 54.1.0
18 DO 36 30 30 31 31 32 37 33 60011273 55.1.0
03 . 55.1.8
18 DI 36 6 56.1.0
18 DI 30 0 57.1.0(2)
18 DI 45 E 59.1.0
18 DI 30 0 60.1.0(2)
18 DI 33 3 62.1.0
18 DI 42 B 63.1.0
18 DI 37 7 64.1.0
18 DI 38 8 65.1.0
18 DI 31 1 66.1.0
18 DI 33 3 67.1.0
18 DI 30 0 68.1.0(6)
18 DI 37 7 74.1.0
18 DI 33 3 75.1.0
18 DI 43 C 76.1.0
18 DI 38 8 77.1.0
18 DI 34 4 78.1.0
18 DI 30 0 79.1.0
18 DI 31 1 80.1.0
18 DI 33 3 81.1.0
18 DI 30 0 82.1.0(2)
18 DI 39 9 84.1.0
18 DI 30 0 85.1.0(3)
18 DI 34 4 88.1.0
18 DI 36 6 89.1.0
18 DI 03 . 90.1.0
18 DO 36 30 30 44 31 35 30 30 600D1500 91.1.0
41 34 30 34 30 30 30 37 A4040007 91.1.8
41 30 30 30 30 30 30 33 A0000003 91.1.16
33 33 30 31 30 31 34 46 3301014F 91.1.24
03 . 91.1.32
18 DI 36 6 92.1.0
18 DI 30 0 93.1.0(2)
18 DI 33 3 95.1.0
18 DI 45 E 96.1.0
18 DI 37 7 97.1.0
18 DI 36 6 98.1.0
18 DI 31 1 99.1.0
18 DI 34 4 100.1.0
18 DI 37 7 101.1.0
18 DI 41 A 102.1.0
18 DI 32 2 103.1.0
18 DI 03 . 104.1.0 很奇怪的是,明明有收到数据,却始终不弹出对话框,为什么OnCommunication函数不能得到执行呢?
求各位大侠指点!
ON_BN_CLICKED(IDC_OFP_TEST, OnOfpTest) //这个是Message map里的void Dialog2::OnOfpTest()
{
pTestDlg = (CMy7115_TESTDlg*)GetParent(); if(CPublic::m_Port.m_hComm==NULL)
{
AfxMessageBox("串口没有打开,请打开串口");
// pTestDlg->m_ctrlIconOnOff.SetIcon(pTestDlg->m_hIconOff);
return;
} if(CPublic::m_Port.InitPort(pTestDlg, CPublic::m_nCom, CPublic::m_nBaud, CPublic::m_cParity, CPublic::m_nDatabits, CPublic::m_nStopbits, CPublic::m_dwCommEvents, BufSize))
{
CPublic::m_Port.StartMonitoring();
if(!(T6806.GetCheck()))
{
m_ctrlTestLog.SetWindowText("++++++++++++++++++++++++请勾选您需要测试的OFP指令++++++++++++++++++++++++");
SetTimer(1, 1000, NULL);
return;
}
if(T6806.GetCheck())
{
while(bTesting)
{}
bTesting=TRUE;
CurOfp=6806;
_6806(SW);
}
}
else
{
AfxMessageBox("没有发现此串口");
// pTestDlg->m_ctrlIconOnOff.SetIcon(pTestDlg->m_hIconOff);
return;
}
}
定义了一个CSting strOfpInstruct="OFP操作指令说明\n\n6806: 6807:\n\n6809: 6810:\n";
以及一个CEidt m_ctrlTestLog;
执行以下代码:
m_ctrlTestLog.SetWindowText(m_strLog);
UpdateData(TRUE);
return;
出来的结果复制到记事本后是这样:为什么\n不能正确得到回车?
CEdit的属性是否为多行?
int Dialog2::_6828(long SW)
{
SW=0000;
transf="1B 79 1B 78 36 30 30 33 31 37 30 32 30 30 37 36 03";
int len=CPublic::Str2Hex(transf,data);
CPublic::m_Port.WriteToPort(data,len);
SetTimer(2,800,NULL); //设置定时器800ms
return SW;
}CEdit属性为Multiline。
2、如果是控件内部发出的消息,检查一下你是否把正确的窗体句柄传给了控件