一个通过USB采集数据的程序中采集的数据是二进制的一个字节一个字节的,现在要把它转化成十进制,两个字节合并成一个十进制,在下面的程序中怎么修改???
BOOL CShowDlg::DrawWave()
{
CClientDC dc(this);
BOOL success = TRUE;
if (m_OpenFile.GetLength() > 0)
{
CFile file;
//打开文件读取数据
if (file.Open(m_OpenFile, CFile::modeRead | CFile::shareDenyNone))
{
DWORD size = file.GetLength();
DWORD dwBytesWritten = 0;
DWORD dwBytesRead = 0;
BYTE buf[MAX_PACKET_SIZE_READFILE];

if (file.Read(buf,115200)) 
{
for (int i=0;i<115200;i++)
{
int x=0;
int y=buf[i];
for (int n=0;n<289;n++)
{
if (i>400(n-1)-1,i<80+400(n-1))
{
dc.MoveTo(0,0);
dc.LineTo(x+i,y);
}
if (i>79+400(n-1),i<160+400(n-1))
{
dc.MoveTo(0,0);
dc.LineTo(x+i,y);
}
if (i>159+400(n-1),i<240+400(n-1))
{
dc.MoveTo(0,0);
dc.LineTo(x+i,y);
}
if (i>239+400(n-1),i<320+400(n-1))
{
dc.MoveTo(0,0);
dc.LineTo(x+i,y);
}
if (i>319+400(n-1),i<340+400(n-1))
{
dc.MoveTo(0,0);
dc.LineTo(x+i,y);
}
if (i>339+400(n-1),i<360+400(n-1))
{
dc.MoveTo(0,0);
dc.LineTo(x+i,y);
}
if (i>359+400(n-1),i<380+400(n-1))
{
dc.MoveTo(0,0);
dc.LineTo(x+i,y);
}
if (i>379+400(n-1),i<400+400(n-1))
{
dc.MoveTo(0,0);
dc.LineTo(x+i,y);
}
}

}
}

}
}
return TRUE;
}还有,上面的饿程序出错了,画图一定要在void CTestView::OnDraw(CDC* pDC)这里画吗?如果是,怎么把这个函数调用到我需要的地方,如果不是,上面的函数错在哪?请高手帮忙看一下

解决方案 »

  1.   

    首先画图的地方不一定必需在ONDRAW里,在你画的地方只要获得设备场景就可以画了,重绘后就在不在了,如果想让画的继续存在就需要记录你画的东西放在ONDRAW里,用INVALIDATE启动重绘,获得设备场景是
    CDC* pDC=GETDC();
    然后用这个DCj就可以画了哦
      

  2.   


    你是在一个Dialog里面绘图,那就在OnPaint中。修改你的函数:
    BOOL CShowDlg::DrawWave(CDC * pDC)
    绘图时使用pDC绘图
    还有绘图函数是频繁调用的函数,不应该在绘图函数中加入读写文件的操作。
    应该在初始化时读入数据,在绘图函数中绘图。BYTE b[];
    int a = b[0];
    a = a << 8;
    a = a & b[1]; 
      

  3.   

    我修改函数为BOOL CShowDlg::DrawWave(CDC * pDC) 
    但是运行时说CDC * pDC出错了overloaded member function 'int (class CDC *)' not found in 'CShowDlg'
      

  4.   

    2字节转换10进制数, short s=(b[0]<<8)+b[1];高字节左移八位,加上低字节就可以了
      

  5.   

    你改函数是不是只改了CPP里的函数体哦,头文件里的声明改过没有啊
      

  6.   

    1. 画图可以直接在OnPaint()函数中进行, 因为看你的代码应该是对话框的
    2. 数据合并是说将两个字节数据按高低位合并还是将两个数相加的和, 没有描述清楚, 再次你的合并需要在哪个地方添加?
      

  7.   

    #define MAKEWORD(a, b)      ((WORD)(((BYTE)((DWORD_PTR)(a) & 0xff)) | ((WORD)((BYTE)((DWORD_PTR)(b) & 0xff))) << 8))
      

  8.   

    #define MAKEWORD(a, b) \ 
        WORD(BYTE(a)|(WORD(BYTE(b))<<8)
      

  9.   

    我把上面的代码改用CDC*pdc,但是编译的时候出错了
    error C2064: term does not evaluate to a function
    这是怎么回事???
    怎么修改