Page 1
Microsoft Foundation ClassMicrosoft Foundation Class(MFC)(MFC)
Ku-Yaw ChangKu-Yaw [email protected] @mail.dyu.edu.tw
Assistant Professor, Department of Assistant Professor, Department of Computer Science and Information EngineeringComputer Science and Information Engineering
Da-Yeh UniversityDa-Yeh University
Page 2
222004/11/162004/11/16 Pattern-Oriented DesignPattern-Oriented Design
OutlineOutline
Application WizardApplication Wizard Microsoft Visual C++.Net 2003Microsoft Visual C++.Net 2003
Document-ViewDocument-View CView::GetDocumentCView::GetDocument CView::OnDrawCView::OnDraw
Device Contexts (DC)Device Contexts (DC)
Using CDCUsing CDC
Page 3
332004/11/162004/11/16 Pattern-Oriented DesignPattern-Oriented Design
Application WizardApplication Wizard
Step OneStep One
Page 4
442004/11/162004/11/16 Pattern-Oriented DesignPattern-Oriented Design
Application WizardApplication Wizard
Step TwoStep Two
2.1.
3.
Page 5
552004/11/162004/11/16 Pattern-Oriented DesignPattern-Oriented Design
Application WizardApplication Wizard
Step ThreeStep Three
Page 6
662004/11/162004/11/16 Pattern-Oriented DesignPattern-Oriented Design
Application WizardApplication Wizard
Step FourStep Four
Page 7
772004/11/162004/11/16 Pattern-Oriented DesignPattern-Oriented Design
Application WizardApplication Wizard
Step FiveStep Five
Page 8
882004/11/162004/11/16 Pattern-Oriented DesignPattern-Oriented Design
Application WizardApplication Wizard
Step SixStep Six
Page 9
992004/11/162004/11/16 Pattern-Oriented DesignPattern-Oriented Design
Application WizardApplication Wizard
Page 10
10102004/11/162004/11/16 Pattern-Oriented DesignPattern-Oriented Design
Document-ViewDocument-View
Page 11
11112004/11/162004/11/16 Pattern-Oriented DesignPattern-Oriented Design
Document-ViewDocument-View
Page 12
12122004/11/162004/11/16 Pattern-Oriented DesignPattern-Oriented Design
GetDocumentGetDocument
Page 13
13132004/11/162004/11/16 Pattern-Oriented DesignPattern-Oriented Design
OnDrawOnDraw
Page 14
14142004/11/162004/11/16 Pattern-Oriented DesignPattern-Oriented Design
Document-ViewDocument-View
CDocumentCDocument UpdateAllViewsUpdateAllViews
CViewCView InvalidateInvalidate
Page 15
15152004/11/162004/11/16 Pattern-Oriented DesignPattern-Oriented Design
Device ContextsDevice Contexts
Device Contexts (DC)Device Contexts (DC) DisplayDisplay PrinterPrinter
Direct v.s. IndirectDirect v.s. Indirect
MemoryMemory InformationInformation
D1 D2 P1 D1 D2 P1
DC
DR1 DR2 DR3
Page 16
16162004/11/162004/11/16 Pattern-Oriented DesignPattern-Oriented Design
Device ContextsDevice Contexts
Device Context functionsDevice Context functions GetDC()GetDC() ReleaseDC()ReleaseDC() … … (see MSDN)(see MSDN)
HDC vs. CDCHDC vs. CDC HDC: Win32 SDKHDC: Win32 SDK CDC: MFCCDC: MFC
Page 17
17172004/11/162004/11/16 Pattern-Oriented DesignPattern-Oriented Design
Using CDCUsing CDC
void CF12345678View::OnDraw(CDC* void CF12345678View::OnDraw(CDC* /*pDC*//*pDC*/)){{
CF12345678Doc* pDoc = GetDocument();CF12345678Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);ASSERT_VALID(pDoc);if (!pDoc)if (!pDoc)
return;return;
// TODO: // TODO: 在此加入原生資料的描繪程式碼在此加入原生資料的描繪程式碼}}
Page 18
18182004/11/162004/11/16 Pattern-Oriented DesignPattern-Oriented Design
Using CDCUsing CDC
void CF12345678View::OnDraw(void CF12345678View::OnDraw(CDC* pDCCDC* pDC)){{
CF12345678Doc* pDoc = GetDocument();CF12345678Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);ASSERT_VALID(pDoc);if (!pDoc)if (!pDoc)
return;return;
CPen penRed(PS_SOLID, 1, RGB(255, 0, 0));CPen penRed(PS_SOLID, 1, RGB(255, 0, 0));CPen * pOldPen;CPen * pOldPen;pOldPen = pDC->SelectObject(&penRed);pOldPen = pDC->SelectObject(&penRed);pDC->SelectStockObject(HOLLOW_BRUSH);pDC->SelectStockObject(HOLLOW_BRUSH);pDC->Ellipse(100, 100, 200, 200);pDC->Ellipse(100, 100, 200, 200);pDC->SelectObject(pOldPen);pDC->SelectObject(pOldPen);
}}