有誰對實時曲線感興趣,幫我看看這些代碼,為什麼不能實現?
我的目的是在Rect(25,25,425,425)範圍內,畫一個表格20*20(相鄰兩條線之間間隔為20)
,然後從最後一隔開始畫曲線,每秒左移一格.
如果需要代碼調試,請留個E_MAIL.
代碼如下:(沒有使用Doc)
int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct)//對應消息WM_CREATE
{ //加入定時器,每秒觸發一次
SetTimer(1,1000,NULL);
return 0;
}
void CChildView::OnDestroy() //對應消息: WM_DESTROY
{
KillTimer(1); //消除定時器
CWnd ::OnDestroy();
}
void CChildView::OnTimer(UINT nIDEvent) //對應消息: WM_TIMER
{
CDC *dc=GetDC();
CRect rc(25,25,425,425);
CMemDC dcMemory(dc,rc); //采用了CMemDC類,見下面
DrawMemory(&dcMemory,&rc); //自定義函數
InvalidateRect (&rc); //只更新 rc這塊區域
CWnd ::OnTimer(nIDEvent);
}
在CChildView中加入下面函數聲明:
void DrawMemory(CDC *memdc,CRect *rc);
DrawMemory實現:
void CChildView::DrawMemory(CDC *memdc,CRect *rc)
{
static int iHeight=0;
//CBrush對象:用來填充控件,窗口或指定區域.
CBrush *oBrush , brush(RGB(127,127,127));
oBrush = memdc->SelectObject(&brush);
memdc->Rectangle(CRect(0,0,400, 400));
memdc->SelectObject(oBrush);
CPen penb(PS_SOLID, 1, RGB(255,255,255));// Solid black pen.
CPen penr(PS_SOLID,2,RGB(255,0,0));
CPen *oldPen=memdc->SelectObject (&penb);
int i,y;
for(i=0,y=0;i<=400;i+=20,y++){ //畫表格
if(i%100==20)memdc->SelectObject (&penr);
else memdc->SelectObject (&penb);
memdc->MoveTo (0,20*y);
memdc->LineTo (400,20*y);
memdc->MoveTo (20*y,0);
memdc->LineTo (20*y,400);
}
memdc->MoveTo (380,iHeight); //畫曲線
iHeight= rand() % 400; //限定在0~400內
memdc->LineTo(400,iHeight);
memdc->SelectObject (oldPen);
}
BOOL CChildView::OnEraseBkgnd(CDC* pDC) //消息: WM_ERASEBKGND
{
return FALSE;
}
into_deep_ocean@163.net
yonggl@hotmail.com
img
cong119@sohu.com
这当然可以实现,如果要,我可以给你简单的例子。
但这种方法有一个很大的弊端,就是如果有别的窗体在你画的区域里,你的DC会把其他窗体的内容也BITBLT。
正确的波形显示一般不用这种方法。