首先我們說下通過鼠標的移動來繪制直線。
這裡要捕獲到鼠標的兩個消息:WM_LBUTTONDOWN, WM_LBUTTONUP。響應WM_LBUTTONDOWN消息記錄直線的起始點,響應WM_LBUTTONUP消息記錄直線的終點並繪制直線。
好了,我們看看怎麼響應。
void CDrawVIEw::OnLButtonDown(UINT nFlags, CPoint point)
{
//MessageBox("Left Button Clicks DrawVIEw");
m_ptOrigin = point ; //這裡先定義了一個內部變量保存直線的起始點
CVIEw::OnLButtonDown(nFlags, point);
}
下面看看響應WM_LBUTTONUP消息記錄直線的終點並繪制直線。
//方法一
void CDrawVIEw::OnLButtonUp(UINT nFlags, CPoint point)
{
HDC hdc;
hdc = ::GetDC(m_hWnd); //調用全局函數
MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,0);
LineTo(hdc,point.x,point.y);
::ReleaseDC(m_hWnd,hdc);
CVIEw::OnLButtonUp(nFlags, point);
}
//方法二
void CDrawVIEw::OnLButtonUp(UINT nFlags, CPoint point)
{
CDC *pDC = GetDC();
pDC->MoveTo(m_ptOrigin);
pDC->LineTo(point);
ReleaseDC(pDC);
}
//方法三
void CDrawVIEw::OnLButtonUp(UINT nFlags, CPoint point)
{
CClientDC dc(this) ; //CClIEntDC對象構造的時候就調用了GetDC,析構的時候調用
ReleaseDC ,只能訪問客戶區
CClIEntDC dc(GetParent());
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
}
//方法四
void CDrawVIEw::OnLButtonUp(UINT nFlags, CPoint point)
{
CWindowDC dc(this) ; //CWindowDC可以訪問客戶區和非客戶區
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
}
void CDrawVIEw::OnLButtonUp(UINT nFlags, CPoint point)
{
CWindowDC dc(GetDesktopWindow()) ; //現在可以訪問桌面
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
}
連續線繪圖:
思路:鼠標移動的信號被捕捉到,然後隨時響應該信號,繪制圖線。
這裡要設置一個BOOL變量 m_bDraw 來判斷是否鼠標左鍵按下了。
//畫連續的線條
void CDrawVIEw::OnMouseMove(UINT nFlags, CPoint point)
{
if ( m_bDraw )
{
CCl
[1] [2] [3] 下一頁