1)API函數方法用HDC HDC hdc; hdc=::GetDC(m_hWnd); MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL); LineTo(hdc,point.x,point.y); ::ReleaseDC(m_hWnd,hdc);//必須成對使用 這里獲得GetDC()函數需要跟ReleaseDC()函數成對使用 2)用CDC類成員函數。此時別忘記ReleaseDC CDC *pDC=GetDC(); pDC->MoveTo(m_ptOrigin); pDC->LineTo(point); ReleaseDC(pDC);//必須成對使用 同樣需要成對使用手動釋放DC 3)用CClientDC CClientDC dc(this); //CClientDC dc(GetParent()); dc.MoveTo(m_ptOrigin); dc.LineTo(point);//此處不需要ReleaseDC,因為CClientDC會自動釋放DC CClientDC構造函數傳遞一個窗口類的對象。其在用完后自動釋放DC,不需要顯式的調用ReleaseDC() 4)用CWindowDC,用它甚至可以整個屏幕區域畫線 CWindowDC dc(this); //CWindowDC dc(GetParent()); /*CWindowDC dc(GetDesktopWindow());//此時可以在整個屏幕上畫線。 dc.MoveTo(m_ptOrigin); dc.LineTo(point);*/ CPen pen(PS_DOT,1,RGB(0,255,0)); CClientDC dc(this); CPen *pOldPen=dc.SelectObject(&pen); dc.MoveTo(m_ptOrigin); dc.LineTo(point); dc.SelectObject(pOldPen); 同樣CWindowDC構造函數也需要傳遞一個窗口類的對象。與CClientDC的區別是該對象可以訪問整個窗口區域,包括框架窗口(菜單欄,工具欄)。而CClientDC只能訪問的是客戶區。 這里同時可以初步了解一下 CPen *pOldPen=dc.SelectObject(&pen);函數,同時注意一下其返回值! 這是GDI畫圖的特點,當給dc執行一次SelectObject,它將返回前一次SelectObject的內容,繪圖完畢,執行dc.SelectObject(pOldPen)。 就相當於你在畫布上畫圖,你手里本來默認拿着一只白色的畫筆,現在你要畫藍色線條,所以你選了一個藍色畫筆,畫圖完畢,你還要恢復你手里默認拿着的白色畫筆。