3,245
社区成员
发帖
与我相关
我的任务
分享
void CCommTestDlg::OnOnCommMscomm1()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(m_Comm1.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{ ////////以下你可以根据自己的通信协议加入处理代码
variant_inp=m_Comm1.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
{ safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
// for(k=0;k<len;k++) //将数组转换为Cstring型变量
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_EditRxData+=strtemp; //加入接收编辑框对应字符串
// a=atoi(strtemp);
// int a=120;
show=atoi(m_EditRxData);
OnPaint();
}
UpdateData(FALSE); //更新编辑框内容
// SetDlgItemText(IDC_EditRxData,m_EditRxData);//不使用UpdateData(FALSE);的原因是该函数会
//刷新整个对话框的数据,而SetDlgItemText()
//只更新接收编辑框的数据。
}
}
void CCommTestDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
CFont font;
font.CreateFont(13,0,0,0,FW_NORMAL,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,NULL);
CWnd *pWnd=GetDlgItem(IDC_STATIC_T);
pWnd->Invalidate();
pWnd->UpdateWindow();
CFont *pOldFont;
CDC *pDC = pWnd->GetDC();
pDC->Rectangle(0, 0,310,310);
pOldFont=pDC->SelectObject(&font); //换字体
pDC->TextOut(2,2,"曲线");
CPen *pPenRed = new CPen(); //创建画笔对象
CPen *pPenBlack=new CPen;
pPenBlack->CreatePen(PS_DOT,1,RGB(0,0,0));
pPenRed ->CreatePen(PS_SOLID, 1, RGB(255, 0, 0)); //红色画笔
//选中当前红色画笔,并保存以前的画笔
CGdiObject *pOldPen = pDC ->SelectObject(pPenRed);
int a=40;
pDC ->MoveTo(20, 20); //绘制坐标轴
pDC ->LineTo(20, 290); //竖起轴
pDC ->LineTo(290,290); //水平轴
pDC->MoveTo(17,24);
pDC->LineTo(20,20);
pDC->LineTo(23,24);
pDC->MoveTo(286,287);
pDC->LineTo(290,290);
pDC->LineTo(286,293);
pDC->TextOut(27,20,"y");
pDC->TextOut(150,292,"x");
pDC->TextOut(7,50+0*40-5,"30");
pDC->TextOut(7,50+1*40-5,"25");
pDC->TextOut(7,50+2*40-5,"20");
pDC->TextOut(7,50+3*40-5,"15");
pDC->TextOut(7,50+4*40-5,"10");
pDC->TextOut(7,50+5*40-5,"5");
pDC->TextOut(7,50+6*40-5,"0");
pDC->MoveTo(20,290);
for(a=40;a<=300;a=a+20)
pDC->LineTo(a,show);
pDC->MoveTo(a+20,290);
}
CDialog::OnPaint();
}
CWnd *pWnd=GetDlgItem(IDC_STATIC_T);
// need not ! pWnd->Invalidate(); draw on IDC_STATIC_T !
pWnd->UpdateWindow();
//
CFont font;
font.CreateFont(13,0,0,0,FW_NORMAL,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,NULL);
CFont *pOldFont;
CDC *pDC = pWnd->GetDC();
pDC->Rectangle(0, 0,310,310);
// 换字体
pOldFont=pDC->SelectObject(&font);
//
pDC->TextOut(2,2,"曲线");
//
CPen *pPenRed = new CPen(); //创建画笔对象
CPen *pPenBlack=new CPen;
pPenBlack->CreatePen(PS_DOT,1,RGB(0,0,0));
pPenRed ->CreatePen(PS_SOLID, 1, RGB(255, 0, 0)); //红色画笔
//选中当前红色画笔,并保存以前的画笔
CGdiObject *pOldPen = pDC ->SelectObject(pPenRed);
pDC ->MoveTo(20, 20); //绘制坐标轴
pDC ->LineTo(20, 290); //竖起轴 y
pDC ->LineTo(290,290); //水平轴 x
// y arrow
pDC->MoveTo(17,24);
pDC->LineTo(20,20);
pDC->LineTo(23,24);
// x arrow
pDC->MoveTo(286,287);
pDC->LineTo(290,290);
pDC->LineTo(286,293);
// y scaler
pDC->TextOut(27,20,"y");
pDC->TextOut(150,292,"x");
pDC->TextOut(7,50+0*40-5,"30");
pDC->TextOut(7,50+1*40-5,"25");
pDC->TextOut(7,50+2*40-5,"20");
pDC->TextOut(7,50+3*40-5,"15");
pDC->TextOut(7,50+4*40-5,"10");
pDC->TextOut(7,50+5*40-5,"5");
pDC->TextOut(7,50+6*40-5,"0");
pDC->MoveTo(20,290);
//
srand(1);
// 1st point
pDC->MoveTo(20,290);
// others
for(int x=40;x<=300;x+=20)
{
int show = rand() % 300;// actual show[] from comm.
pDC->LineTo(x,show);
}