1.在dlg類中添加如下定義
HWND m_hWnd;
CRect m_rect;
HDC hdc;
CDC* pDC;
CRect rectClient;
float num;//用於計數,初始化爲零
2.添加WM_TIMER消息。添加按鈕1,在其響應函數中開啓時鐘。添加靜態文本框用於計時(num)
3.在OnTimer函數中,代碼如下
SetDlgItemInt(IDC_STATIC,num,1);
GetClientRect(&m_rect);//創建設備描述表
hdc=::GetDC(m_hWnd);//獲得窗口的設備描述表
//pDC=GetDC();
int a=500,b=500,c=1000,d=600;
a=200;
b=100;
GetClientRect(rectClient);
CBitmap MemBitmap;
CDC MemDC;
pDC=GetDC();
MemDC.CreateCompatibleDC(pDC);//創建與目標DC相兼容的內存DC---MemDC
MemBitmap.CreateCompatibleBitmap(pDC,m_rect.Width(),m_rect.Height());//根據目標DC創建位圖
MemDC.SelectObject(&MemBitmap);//把位圖選入內存DC
MemDC.SetMapMode(MM_ANISOTROPIC);
MemDC.SetWindowOrg(a,b);//設置原點
MemDC.SetWindowExt(c,d);//設定窗口尺寸,即繪圖區的大小
MemDC.SetViewportExt(rectClient.right,rectClient.bottom);
MemDC.SetViewportOrg(0,0);
MemDC.FillSolidRect(m_rect,RGB(0,255,0));//背景填充
CPen newPen(PS_SOLID,1, RGB(255,0,0));//創建畫筆
MemDC.SelectObject(&newPen);//選用畫筆
MemDC.MoveTo(0,0);
MemDC.LineTo(200,400);
MemDC.MoveTo(a,b);
num=num+1;
if(num<=c)
{
for(int i=0;i<num;i++)
{
MemDC.LineTo(i+a,-d*(sin(i*0.01))/2+b+d/2);
}
}
else
{
float t=num-c;
for(int i=0;i<=c;i++)
{
MemDC.LineTo(i+a,-d*(sin((i+t)*(c/1000)*0.01))/2+b+d/2);
}
}
pDC->BitBlt(m_rect.left,m_rect.top,m_rect.Width(),m_rect.Height(),&MemDC,0,0,SRCCOPY);
ReleaseDC(pDC);//釋放DC
CDialogEx::OnTimer(nIDEvent);
4效果如下