Re: problem with add old string to new string in edit box (MFC)
I paste all code because I can't find mistake:
( some global variable in *.h )
LRESULT CIrda_controlDlg::OnNewValue(WPARAM wParam, LPARAM NotUsed)
{
if (wParam != NULL)
{
CString* pStr = (CString*)wParam;
int len = m_odbierane.GetWindowTextLength();
m_odbierane.SetSel(len,len);
m_odbierane.ReplaceSel(p4Str);
delete pStr;
};
return 0;
}
void CIrda_controlDlg::OnOpenPort()
{
// OpenPort1();
}
void CIrda_controlDlg::OnSendPort()
{
UpdateData(TRUE); // <-----edit box 2
SetEvent (SendEvent);
}
void CIrda_controlDlg::OnReceivePort()
{
WaitCommEvent(m_hComm,&EventMask,&EventOverlapped);
}
void CIrda_controlDlg::ThreadStartFunc(void* arg)
{
CIrda_controlDlg* pThis = (CIrda_controlDlg*)arg;
pThis->WorkerThread();
}
void CIrda_controlDlg::WorkerThread()
{
DWORD WaitResult;
DWORD ReadDataLenght;
Rbuf = new BYTE[100];
Wbuf = new BYTE[100];
ReadEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
WriteEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
EventEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
SendEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
StopEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
EventsArray[0]=ReadEvent;
EventsArray[1]=WriteEvent;
EventsArray[2]=EventEvent;
EventsArray[3]=SendEvent;
EventsArray[4]=StopEvent;
ZeroMemory(&ReadOverlapped, sizeof(OVERLAPPED));
ReadOverlapped.hEvent=ReadEvent;
ZeroMemory(&WriteOverlapped, sizeof(OVERLAPPED));
WriteOverlapped.hEvent=WriteEvent;
ZeroMemory(&EventOverlapped, sizeof(OVERLAPPED));
EventOverlapped.hEvent=EventEvent;
GetCommMask(m_hComm,&EventMask);
EventMask |= EV_RXCHAR;
SetCommMask (m_hComm,EventMask);
int i;
while (TRUE)
{
WaitResult= WaitForMultipleObjects(5,EventsArray,FALSE,INFINITE);
switch (WaitResult) {
case WAIT_OBJECT_0: // receive from serial port
{
GetOverlappedResult
(m_hComm,&ReadOverlapped,&ReadDataLenght,FALSE);
CString str( (LPCTSTR) Rbuf, 1);
CString* pStr = new CString;
*pStr = _T(str);
PostMessage(WM_APP +1, (WPARAM)pStr, 0); //
---->my edit box
ReadFile(m_hComm,Rbuf,1,&ReadBytesNumber,&ReadOverlapped);
break;
}
case WAIT_OBJECT_0+1: //end of wirting
{
ResetEvent (WriteEvent);
break;
}
case WAIT_OBJECT_0+2: //event on port (when EventMask |=
EV_RXCHAR)
{
COMSTAT comstat;
DWORD Errors;
ClearCommError(m_hComm,&Errors,&comstat);
ReadFile(m_hComm,Rbuf,1,&ReadBytesNumber,&ReadOverlapped);
WaitCommEvent(m_hComm,&EventMask,&EventOverlapped);
break;
}
case WAIT_OBJECT_0+3: // sending to port
{
str1 = _T(m_wysylane);
for( i = 0; i < str1.GetLength(); i++)
Wbuf[i] = static_cast<BYTE>(str1 [i]);
if
(WriteFile(m_hComm,Wbuf,str1.GetLength(),&WriteBytesNumber,&WriteOverlapped))
AfxMessageBox("ok");
else
ShowError();
ResetEvent (SendEvent);
break;
}
case WAIT_OBJECT_0+4: // stop the thread
{
ResetEvent(StopEvent);
break;
}
}
}
delete [] Wbuf;
delete [] Rbuf;
}
I toil over this very long time... :(