孫鑫mfc 4.簡單繪圖


void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
 // TODO: Add your message handler code here and/or call default
 m_ptOrigin = point;
 m_bDraw = true;
 CView::OnLButtonDown(nFlags, point);
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
//  //1.利用SDK全局函數實現畫線功能
//  //首先得到窗口的設備描述表
//  HDC hdc;
//  hdc = ::GetDC(m_hWnd);   //得到設備描述表句柄,平臺sdk函數必須加::,不然被認爲是CWnd函數
//       //CWnd類都有一個成員變量m_hWnd保存窗口句柄,CDrawView繼承CWind所以一樣有m_hWnd
//  //移動到線條的起點
//  MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
//  //畫線
//  LineTo(hdc, point.x, point.y);
//  //釋放設備描述表
//  ::ReleaseDC(m_hWnd,hdc);
//  //2.利用mfc的CDC類實現畫線功能
//  CDC * pDc;   
//  pDc = GetDC();  //得到當前窗口的設備描述表指針
//  pDc->MoveTo(m_ptOrigin);
//  pDc->LineTo(point);
//  ReleaseDC(pDc);
// //3.利用mfc的CClientDC類實現畫線功能
// //CClientDC派生於CDC類,可自動獲取,釋放設備描述表資源
//  CClientDC dc(this);  //構造函數須要一個CWnd指針
//  // CClientDC dc(GetParent()); //得到View的父窗口句柄也就是Frame,此時畫線能夠畫到工具欄內
//  dc.MoveTo(m_ptOrigin);
//  dc.LineTo(point);
//  //4.利用mfc的CWindowDC類實現畫線功能
// //CWindowDCC派生於CDC類,也可自動獲取,釋放設備描述表資源
//  CWindowDC dc(this);
//  //CWindowDC dc(GetParent()); //此時能夠將線畫到菜單欄,標題欄
//  //CWindowDC dc(GetDesktopWindow()); //得到桌面窗口句柄
//  dc.MoveTo(m_ptOrigin);
//  dc.LineTo(point);
//  //5.改變畫筆顏色
//  CPen pen(PS_SOLID,10,RGB(255,0,0));
//  CClientDC dc(this);
//  CPen *pOldPen = dc.SelectObject(&pen); //將畫筆選擇到設備描述表中
//  dc.MoveTo(m_ptOrigin);
//  dc.LineTo(point);
//  dc.SelectObject(pOldPen); //畫完後改成最初的畫筆
 
//  //6.畫刷建立
//  CBrush brush(RGB(0,255,0));
//  CClientDC dc(this);
//  dc.FillRect(CRect(m_ptOrigin,point),&brush);//此處用指定的畫刷去填充,
//             //因此不須要將畫刷選擇到設備描述表
//  //7.位圖畫刷
//  //事先插入資源類型爲bitmap的位圖(id爲IDB_BITMAP1)
//  CBitmap bitmap;
//  bitmap.LoadBitmap(IDB_BITMAP1);
//  CClientDC dc(this);
//  CBrush brush(&bitmap); //用bitmap建立畫刷
//  dc.FillRect(CRect(m_ptOrigin,point),&brush);
//  //8.畫矩形
//  CClientDC dc(this);
//  dc.Rectangle(CRect(m_ptOrigin,point));//畫矩形函數,此時若是矩形重合,新矩形會覆蓋原矩形的邊
//             //緣由是因爲默認畫刷爲白色且會自動填充矩形內部
//  //9.畫內部透明的矩形
//  CClientDC dc(this);
//  CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
//      // GetStockObject函數返回類型爲HGDIOBJ,需強制轉換爲FromHandle的參數類型HBRUSH
//   CBrush* pOldBrush= dc.SelectObject(pBrush); //下面畫矩形的函數中不能指定畫刷,因此須要爲設備描述表選擇畫刷
//  dc.Rectangle(CRect(m_ptOrigin,point));
//  dc.SelectObject(pOldBrush);
//  //dc.FillRect(CRect(m_ptOrigin,point),pBrush); //若是不是選擇畫刷再畫矩形,直接經過這種方式是畫不出矩形邊框的
 //10.畫曲線相關
 m_bDraw = false;
 CView::OnLButtonUp(nFlags, point);
}
void CDrawView::OnMouseMove(UINT nFlags, CPoint point) {  CClientDC dc(this);  if (true == m_bDraw) //判斷鼠標是否已經按下  {   dc.MoveTo(m_ptOrigin);   dc.LineTo(point);   m_ptOrigin = point;  //將起始點 改成如今鼠標的位置  }  CView::OnMouseMove(nFlags, point); }
相關文章
相關標籤/搜索