?????
解决方案 »
- CArray<SOCKADDR_IN,SOCKADDR_IN> m_UserFrom;编译出错求教?
- 200-300分求《Programming Server-Side Applications for Microsoft Windows 2000 》随书源码
- 摄象头的视频捕捉、抓图片、查看视频源如何来编程
- 大家好,小弟有个疑问就是从++和vc之间是什么关系,他们有什么相同之处,又有什么差别?
- 请教一个简单的控制台(Console)问题,怎么才能在指定位置显示(printf)字符?
- ★★滤波★★100分仅仅要求分析一下一个软件的滤波器★★滤波★★
- 为什么OnKillFocus没有相应
- 请高手帮忙,如何能把生成的图形转化为JPG文件?
- 大家推荐一下VC++ 2005的国外书籍?
- mfc中子对话框的控件没反应
- 求高手解答,用银子奖励。
- 刚发现咱也混成3个裤衩了
http://www.codeproject.com/KB/cpp/processviewer.aspx
可以在OnTimer()中写下面代码: CDC* pDC;
pDC = m_parentWnd->GetDC(); //m_parentWnd 为需要画波形图的Dialog的m_hWnd CSize szFont; szFont = pDC->GetTextExtent("1"); CRect rcClient;
m_parentWnd->GetClientRect(rcClient); //得到画图的客户区域 CDC dcMem;
dcMem.CreateCompatibleDC(NULL);//这里我们就在内存中虚拟建造了DC
CBitmap bitmap;
CBitmap* pOldBitmap;
if(bitmap.CreateCompatibleBitmap(pDC,rcClient.Width(), rcClient.Height()))//创建一与pDC兼容的位图,大小为整个客户区
{
pOldBitmap=dcMem.SelectObject(&bitmap);//将位图选入内存环境
dcMem.SelectClipRgn(NULL);//使dc的整个客户区都成无效区
dcMem.IntersectClipRect(rcClient);//再“与上”检取的无效区,使内存环境与pDC检取的无效区相等
} CDC* pdcClient;
CPen pen,pen1;
// pdc = m_parentWnd->GetDC();
pdcClient = &dcMem;
CRect roundrc; BOOL bCanDrawline;
bCanDrawline = IsCanDrawLine(); //重新刷新背景
if( bCanDrawline )
{
pdcClient->Rectangle(rcClient);
CBrush bsh(RGB(0,0,0));
pdcClient->FillRect(rcClient, &bsh);
}// DrawGrids( pdcClient ); int lineStartPos, lineEndPos; //画上下界限线, 把界面分成4等份
POINT startPos,EndPos;
int UpLimit, DownLimit, line_height; lineStartPos = rcClient.left;
lineEndPos = rcClient.right; startPos.x = rcClient.left;
startPos.y = rcClient.top + (rcClient.bottom-rcClient.top)*2/4;
m_ZeroY = startPos.y; int imodvalue;
imodvalue = m_lineheight % ( 2 * BETWEENSPACEVALUE );
if( imodvalue != 0 ) m_lineheight -= imodvalue; UpLimit = m_ZeroY - m_lineheight; DownLimit = m_ZeroY + m_lineheight; line_height = m_lineheight; EndPos.x = rcClient.right; startPos.y = UpLimit;
EndPos.y = UpLimit; pen1.CreatePen(PS_SOLID,1,RGB(0,128,0));
CPen* pOldPen1 = (CPen*)pdcClient->SelectObject(&pen1); DrawGrids( pdcClient ); pdcClient->SelectObject( pOldPen1 ); pen1.DeleteObject();
pen1.CreatePen(PS_SOLID,1,RGB(255,255,0));
pOldPen1 = (CPen*)pdcClient->SelectObject(&pen1); int fnWidth, fnHeight; CString strup;
if( m_MaxShow.GetLength()<1 )
strup.Format("%.2f",linelimitevalue.UpLimiteValue);
else strup = m_MaxShow;
CRect rcUpvalue;
fnWidth = szFont.cx * strup.GetLength();
fnHeight = szFont.cy;
rcUpvalue.left = rcClient.right - fnWidth - 2;
rcUpvalue.top = UpLimit - fnHeight - 2;
rcUpvalue.bottom = rcUpvalue.top + fnHeight + 1;
rcUpvalue.right = rcClient.right - 1;
//写上界值
pdcClient->SetBkMode(TRANSPARENT); pdcClient->SetTextColor(RGB(255,255,0));
pdcClient->DrawText( strup, rcUpvalue, DT_CENTER); //画上界限
pdcClient->MoveTo(startPos);
pdcClient->LineTo(EndPos); //写零坐标值
// CString strzero;
// strzero.Format("%.2f",linelimitevalue.ZeroValue);
// CRect rcZerovalue;// fnWidth = szFont.cx * strup.GetLength();
// fnHeight = szFont.cy;// rcZerovalue.left = rcClient.right - fnWidth - 2;
// rcZerovalue.top = m_ZeroY - fnHeight - 2;
// rcZerovalue.right = rcClient.right - 1;
// rcZerovalue.bottom = rcZerovalue.top + fnHeight + 1;// pdcClient->DrawText( strzero, rcZerovalue, DT_CENTER); //画零坐标线
startPos.y = m_ZeroY;
EndPos.y = m_ZeroY;
pdcClient->MoveTo(startPos);
pdcClient->LineTo(EndPos); //写下界值
CString strDown;
if( m_MinShow.GetLength()<1 )
strDown.Format("%.2f",linelimitevalue.DownLimiteValue);
else strDown = m_MinShow;
CRect rcDownvalue; fnWidth = szFont.cx * strDown.GetLength();
fnHeight = szFont.cy; rcDownvalue.left = rcClient.right - fnWidth - 2;
rcDownvalue.top = DownLimit + 1;
rcDownvalue.right = rcClient.right - 1;
rcDownvalue.bottom = rcDownvalue.top + fnHeight + 2; pdcClient->DrawText( strDown, rcDownvalue, DT_CENTER);
//画下界限
startPos.y = DownLimit;
EndPos.y = DownLimit;
pdcClient->MoveTo(startPos);
pdcClient->LineTo(EndPos); pdcClient->SelectObject(pOldPen1); pen.CreatePen(PS_SOLID,1,RGB(68,232,219));
CPen* pOldPen = (CPen*)pdcClient->SelectObject(&pen); int i = 0;
double *pdblPos; int iArrCount = m_arrYHeight.GetSize(); if( (lineEndPos-lineStartPos)>(m_betweenspace*iArrCount) )
{
i = 0;
m_fromPos.x = lineEndPos-m_betweenspace*iArrCount;
}
else
{
i = iArrCount - ( (lineEndPos-lineStartPos)/m_betweenspace );
m_fromPos.x = lineStartPos;
} if(m_arrYHeight.GetSize()<1) return FALSE;
double dblpos;
//画第一个点
pdblPos = (double*)m_arrYHeight.GetAt(i); dblpos = *pdblPos;
if(*pdblPos>99000) dblpos = 0;
dblpos = (dblpos-linelimitevalue.ZeroValue)*m_ZoomInRatio;
m_fromPos.y = m_ZeroY-int(dblpos/m_Height*line_height); if( *pdblPos<99000 ) //不是临时加的点
{
if( ( m_fromPos.y>=UpLimit )&&
( m_fromPos.y<=DownLimit ) )
{
pdcClient->SetPixel(m_fromPos,RGB(0,0,255)); //打蓝点
}
else
{
pdcClient->SetPixel(m_fromPos,RGB(255,0,0)); //打红点
}
} i++; double *pdblprePos;
COLORREF clNaturaldot, clAlarmdot;
clAlarmdot = RGB(255,0,0);
clNaturaldot = RGB(255,255,255);
while( (i<iArrCount) )
{
m_toPos.x = m_fromPos.x+m_betweenspace;
pdblprePos = (double*)m_arrYHeight.GetAt(i-1);
pdblPos = (double*)m_arrYHeight.GetAt(i);
dblpos = *pdblPos;
if(*pdblPos>90000) dblpos = 0;
dblpos = (dblpos-linelimitevalue.ZeroValue)*m_ZoomInRatio;
m_toPos.y = m_ZeroY-int(dblpos/m_Height*line_height);// if( ( *pdblprePos>9000 )&&( *pdblPos>9000 ) )
if( *pdblPos>9000 )
{
//不处理
}
else
{
pdcClient->MoveTo(m_fromPos);
pdcClient->LineTo(m_toPos); if( ( m_fromPos.y>=UpLimit )&&
( m_fromPos.y<=DownLimit ) )
{
if( m_fromPos.y<m_ZeroY )
pdcClient->SetPixel(m_fromPos.x,m_fromPos.y-1,clNaturaldot); //打白点
else
{
if( m_fromPos.y==m_ZeroY )
pdcClient->SetPixel(m_fromPos.x,m_fromPos.y,clNaturaldot); //打白点
else pdcClient->SetPixel(m_fromPos.x,m_fromPos.y+1,clNaturaldot); //打白点
}
}
else
{
if( m_fromPos.y < UpLimit )
pdcClient->SetPixel(m_fromPos.x,m_fromPos.y-1, clAlarmdot); //打红点
else pdcClient->SetPixel(m_fromPos.x,m_fromPos.y+1, clAlarmdot); //打红点
}
if( ( m_toPos.y>=UpLimit )&&
( m_toPos.y<=DownLimit ) )
{
if( m_toPos.y < m_ZeroY )
pdcClient->SetPixel(m_toPos.x,m_toPos.y-1,clNaturaldot); //打白点
else
{
if( m_toPos.y == m_ZeroY )
pdcClient->SetPixel(m_toPos.x,m_toPos.y,clNaturaldot); //打白点
else pdcClient->SetPixel(m_toPos.x,m_toPos.y+1,clNaturaldot); //打白点
}
}
else
{
if( m_toPos.y < UpLimit )
pdcClient->SetPixel(m_toPos.x,m_toPos.y-1,clAlarmdot); //打红点
else pdcClient->SetPixel(m_toPos.x,m_toPos.y+1,clAlarmdot); //打红点
}
} m_fromPos = m_toPos;
++i;
} pDC->BitBlt(rcClient.left,rcClient.top,rcClient.Width(),rcClient.Height(),&dcMem,0,0,SRCCOPY);//第一次拷贝到屏幕
m_parentWnd->ReleaseDC(pDC); pdcClient->SelectObject(pOldPen);
pdcClient->SelectObject(pOldBitmap); pdcClient->DeleteDC();
pdcClient = NULL;