我用MSCHART每秒钟生成一个点,每秒钟就闪烁一次,在网上看到有达人写了代码
http://blog.sina.com.cn/s/blog_5018d6110100bx01.html我是在一个线程中生成曲线的点,我把线程函数改成了网上写的那样,可是还是有闪烁,不知道什么原因,下面是部分代码
DWORD mvShowThread(LPVOID pParam)
{
while(1)
{
if( ((CCurveDlg*)pParam)->m_flagShowMv )
{
if( ((CCurveDlg*)pParam)->flagMvChanged )
{
HANDLE hDib;

((CCurveDlg*)pParam)->m_Picture.BringWindowToTop(); // m_Picture是与Picture控件关联的控制型变量
((CCurveDlg*)pParam)->m_Picture.ShowWindow(SW_SHOW);
CDC *pDC = ((CCurveDlg*)pParam)->GetDlgItem(IDC_PICTURE)->GetDC();

((CCurveDlg*)pParam)->m_Chart.SetRow(((CCurveDlg*)pParam)->row);
((CCurveDlg*)pParam)->m_Chart.SetRowLabel((LPCTSTR)buf1);
((CCurveDlg*)pParam)->m_Chart.GetDataGrid().SetData(((CCurveDlg*)pParam)->row, 
1,((CCurveDlg*)pParam)->m_dMv, 0); //设置第一条曲线的第row个点
((CCurveDlg*)pParam)->row++;
if(((CCurveDlg*)pParam)->row>5)
((CCurveDlg*)pParam)->row = ((CCurveDlg*)pParam)->row -5;

((CCurveDlg*)pParam)->m_Chart.EditCopy(); // 复制到系统粘贴板
if(OpenClipboard( ((CCurveDlg*)pParam)->m_hWnd ) )
{
hDib = GetClipboardData(CF_DIB);  
CloseClipboard();
}

BITMAPINFO* pbi = (BITMAPINFO*)GlobalLock(hDib);
        if (pbi != NULL)
{
BYTE* data = (BYTE*)(pbi->bmiColors);
if (pbi->bmiHeader.biBitCount <= 8)
{
int nColor = (pbi->bmiHeader.biClrUsed==0) ?
                             1<<(pbi->bmiHeader.biBitCount) : pbi->bmiHeader.biClrUsed; // nColor颜色表中的颜色数
data += sizeof(RGBQUAD) *nColor;
}
pDC->BitBlt();
StretchDIBits(pDC->GetSafeHdc(),0,0, pbi->bmiHeader.biWidth,
pbi->bmiHeader.biHeight,0, 0, pbi->bmiHeader.biWidth,
pbi->bmiHeader.biHeight, data, pbi, DIB_RGB_COLORS, SRCCOPY);// 显示,我为了保留外面的方框,前面宽度和高度都减了1
GlobalUnlock(hDib);
}

pDC->DeleteDC();
}

}
else
break;

}
return 0;
}