ON_MESSAGE(WM_RECEIVEDATA,RECEIVEDATA)

LRESULT CComView::RECEIVEDATA(WPARAM wParam, LPARAM lParam) {
CEdit* edit = (CEdit*)GetDlgItem(IDC_EDIT8);
static int i=0;
static unsigned char buf[2048]={0,};
buf[i] = *m_pCom.abIn;
buf[i+1] = '\0';
edit->SetWindowText((LPCTSTR)buf);
i++;
if(i==2046) i = 0;
return 0;
}

데이터를 받으면 WM_RECEIVEDATA라는 메시지가 날아와서 RECEIVEDATA 함수가 실행이 되는데
제가 MFC초보라서 정확히 설명을 잘 못드리겠습니다!!
abIn이라는 변수는 시리얼쪽에 들어온 1Byte 데이터이며 이것을 버퍼에 저장하고 뒤에 널 문자를 추가시켜 문자열을 만들어 Edit박스에 이 문자열을 찍는것이고 i변수를 통해 앞에 받은 문자랑 뒷문자랑 연결 시켜서 마치 뒤에 하나씩 붙는것 처럼 표현하려고 한건데..
모호한 말이지만 잘 받을때 가 있고 안될때가 있습니다.. 전체 소스는 필요하시다면 올리겠습니다!
루틴이 뭐가 잘못된건가요?