Professional Documents
Culture Documents
LP TRNH WINDOWS
Th vin ha GDI
(Graphics Device Interface)
V I TNG
CHN I TNG
P(xP,yP)
P(xP,yP) M(xM,yM)
Q(xQ,yQ)
Q(xQ,yQ)
Chn ng thng tng ng vi vic di chuyn chut v click ln ng thng PQ Ta M ca chut nm trn ng thng PQ hay M PQ
x xP y yP = x P xQ y P y Q
Ax + By + C = 0 A = yP yQ B = xQ xP C = xP*yQ xQ*yP
P M Q
Ax M + By M + C A2 + B 2
Tran Ngoc Bao
=0
x P xM x Q y P yM y Q
Ax M + By M + C
Q M
A2 + B 2
=0
10
P M Q P
M Q
Tran Ngoc Bao
Vi - Ax + By + C = 0 (d) l phng trnh ng thng qua 2 im PQ - xmin = min(xP,xQ), xmax = max(xP,xQ) - ymin = min(yP,yQ), ymax = max(yP,yQ)
11
Ax + By M + C A + B2
=0
12
13
P M Q Q
14
V hnh ch nht ti im P
V hnh ch nht ti im Q
15
17
D
- Kim tra im M AB - Kim tra im M BC - Kim tra im M CD - Kim tra im M DA
18
M(XM,YM)
O(XO,YO)
19
M(XM,YM)
O(XO,YO)
20
A M C
C D
xA x M x C yA y M y C
21
M(XM,YM) R
O(XO,YO)
22
M(XM,YM)
O(XO,YO)
23
CHN A GIC BT K C T MU
M M
M M
M a gic li a gic lm
24
CHN A GIC BT K C T MU
C 1 giao im C 2 giao im
C 1 giao im
C 2 giao im
a gic li
25
CHN A GIC BT K C T MU
K C 1 giao im M M M
C 0 giao im - iu kin M nm trong a gic C 4 giao im ? - iu kin M nm ngoi a gic ? C 4 giao im
M M a gic lm M
C 3 giao im C 0 giao im
26
CHN A GIC BT K C T MU
M
M M
- iu kin M nm trong a gic s giao im ca ng thng k t M n cc cnh ca a gi l mt s l: 1, 3, 5,.. - iu kin M nm ngoi a gic s giao im ca ng thng k t M n cc cnh ca a gi l mt s chn: 0, 2, 4,
Tran Ngoc Bao 27 Dai hoc Su Pham TP.HCM
28
29
B B
B
30 Dai hoc Su Pham TP.HCM
xA = xA + dx
dy A(xA,yA) dx
void TRANSLATION(CPoint &Destination,CPoint Source,int dx,int dy) { Destination.x=Source.x+dx; Destination.y=Source.y+dy; }
yA = yA + dy
31
O(x,yo O(xoo,y)o)
33
DI CHUYN I TNG
Di chuyn hnh ch nht
Di chuyn a gic
34
X l s kin MouseDown
- Chn i tng t v tr ca chut - Ly ta im u (ta ca chut)
X l s kin MouseMove
- Tnh tin i tng n v tr hin hnh ca chut - Xa i tng c - V i tng mi
X l s kin MouseUp
- Cp nht cc thuc tnh (ta ) ca i tng - Gi hm Invalidate pht sinh s kin OnDraw
35
36
QUN L LU TR I TNG
S lp i tng
CShape
CLine
CRectangle
Class CShape : public CObject { }; Class CRectangle : public CShape { }; Class CLine : public CShape { };
37
QUN L LU TR I TNG
Class CGDISampleDoc : public CDocument { CTypedPtrList<CObList, CShape*> m_aSO; void Add(CShape &obj); }; void CGDISampleDoc::Add(CShape &obj) { CShape *temp; obj.DuplicateObject(temp); m_aSO.AddTail(temp); } s dng kiu d liu CTypedPtrList phi thm vo tp tin Stdafx.h th vin sau: #include <afxtempl.h>
38
QUN L LU TR I TNG
void CGDISampleView::OnDraw(CDC* pDC) { CTNBPaintDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);
//V cc i tng: Line, Rectange
39
LP I TNG CShape
Thuc tnh i tng Shape
class CShape : public CObject { public: BOOL m_bFilled; // Doi tuong co duoc to hay khong int m_nPenWidth; // Be rong cua but ve int m_nPenStyle; // Kieu but ve (SOLID,DOT,DASH,...) COLORREF m_BrushColor; // Mau to COLORREF m_PenColor; // Mau duong bao int m_nPattern; //Pattern cua doi tuong CShape(); virtual ~CShape(); };
40
LP I TNG CShape
Cc hm ca lp CShape
class CShape : public CObject { public: virtual void Draw(CDC * pDC); virtual void DuplicateObject(CShape * & pObj); virtual void Fill(CDC * pDC); public: void Show(CDC * pDC, int nDrawMode); void operator =(CShape &s); CShape(); virtual ~CShape(); };
41
LP I TNG CShape
Cc hm ca lp CShape
void CShape::DuplicateObject(CShape *&pObj) { pObj=new CShape(); pObj->operator=(*this); } void CShape::operator =(CShape & s) { m_BrushColor = s.m_BrushColor; m_bFilled = s.m_bFilled; m_PenColor = s.m_PenColor; m_nPenStyle = s.m_nPenStyle; m_nPenWidth = s.m_nPenWidth; m_nPattern=s.m_nPattern; }
42
LP I TNG CShape
Cc hm ca lp CShape
CShape::CShape() { m_PenColor = RGB(0,0,0); m_BrushColor = RGB(0,128,0); m_nPenStyle = PS_SOLID; m_nPenWidth = 1; m_bFilled = false; m_nPattern=HS_SOLID; }
void CShape::Draw(CDC *pDC) { } void CShape::Fill(CDC *pDC) { }
43
LP I TNG CLine
Cc thnh phn ca lp CLine
class CLine : public CShape { public: CPoint point2; CPoint point1; public: void Draw(CDC * pDC); void operator =(CLine &l); void DuplicateObject(CShape*& pObj); void SetPoint(int nIndex, CPoint p); CLine(); CLine(CPoint p1,CPoint p2); virtual ~CLine(); };
44
LP I TNG CLine
Cc thnh phn ca lp CLine
CLine::CLine() { m_PenColor = RGB(255,0,0); m_BrushColor = RGB(0,128,0); m_nPenStyle = PS_SOLID; m_nPenWidth = 2; m_bFilled = false; m_nPattern=HS_SOLID; } CLine::CLine(CPoint p1,CPoint p2) { point1 = p1; point2 = p2; }
45
LP I TNG CLine
Cc thnh phn ca lp CLine
void CLine::DuplicateObject(CShape * & pObj) { //Ham tao mot doi tuong moi pObj=new CLine(); ((CLine*)pObj)->operator=(*this); } void CLine::operator =(CLine & l) { CShape::operator =(l); point1=l.point1; point2=l.point2; }
Tran Ngoc Bao 46 Dai hoc Su Pham TP.HCM
LP I TNG CLine
Cc thnh phn ca lp CLine
void CLine::Draw(CDC *pDC) { //Tao mot pen moi CPen newPen(m_nPenStyle,m_nPenWidth,m_PenColor); CPen *pOldPen = pDC->SelectObject(&newPen); //Ve duong thang pDC->MoveTo(point1.x,point1.y); pDC->LineTo(point2.x,point2.y); pDC->SelectObject(pOldPen); }
47
LP I TNG CRectangle
Cc thnh phn ca lp CRectangle
class CRectangle : public CShape { public: CPoint point2; CPoint point1; public: void operator =(CRectangle & l); void DuplicateObject(CShape * & pObj); void Draw(CDC * pDC); void SetPoint(int nIndex, CPoint p); CRectangle(); virtual ~CRectangle(); };
Tran Ngoc Bao 48 Dai hoc Su Pham TP.HCM
LP I TNG CRectangle
Cc thnh phn ca lp CRectangle
void CRectangle::operator =(CRectangle & l) { CShape::operator =(l); point1=l.point1; point2=l.point2; } void CRectangle::DuplicateObject(CShape * & pObj) { //Ham tao mot doi tuong moi pObj=new CRectangle(); ((CRectangle*)pObj)->operator=(*this); }
49
LP I TNG CRectangle
Cc thnh phn ca lp CRectangle
void CRectangle::Draw(CDC * pDC) { CPen newPen(m_nPenStyle,m_nPenWidth,m_PenColor); CPen *pOldPen = pDC->SelectObject(&newPen); //Ve hinh chu nhat pDC->Rectangle(point1.x,point1.y,point2.x,point2.y); pDC->SelectObject(pOldPen); } void CRectangle::Fill(CDC * pDC) { }
50
TO CC I TNG
Class CGDISampleDoc : public CDocument { CTypedPtrList<CObList, CShape*> m_aSO; void Add(CShape &obj); };
51
TO CC I TNG
Class CGDISampleDoc : public CDocument { CTypedPtrList<CObList, CShape*> m_aSO; void Add(CShape &obj); };
52
54
55
56
57
58