IV. GDI en device context



Vergelijkbare documenten
Graphics. Small Basic graphics 1/6

X. Grafische elementen

Labo 2 Programmeren II

door Vaksectie Informatica Alberdingk Thijm College ACS-logo

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Klassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers

IMP Uitwerking week 13

Handleiding Paint 2003

Tekenobjecten Module 12

Simon de schildpad J van Weert 1

eerste voorbeelden in Java

VI. Klassen en objecten

Software Instructions for Real Kids - Felix Plesoianu (2009) en Kris Merckx (2013) - Creative Commons License

WELKOM BIJ UNICODING PROCESSING. Unicoding 1. Handleiding docent LES 1 DEEL A: Vormen, coördinaten en kleuren

Met een LightSwitch applicatie een OData service uit de Windows Azure Marketplace consumeren

Scratch in drie uur. Hallo, mijn naam is Minti Mint! Ik ga je uitleggen hoe je je eigen computerspel kunt maken. We gaan een racespel maken!

4. Getekende objecten bewerken

SketchUp L D tekenen

Out of bound - PP 2007 & 2010

Snelstartgids FiloCAD2

Opdracht 7a. Applicatiebouw 2014/2015

Afdrukken van AutoCad-tekeningen

Scratch. Gemaakt door: Déjan van Noordt en Leroy van den Driesche Leerlingen HAVO 5 SG Spieringshoek Als onderdeel voor het vak Informatica

Examen Software Ontwikkeling I 2e Bachelor Informatica Academiejaar Januari, **BELANGRIJK** : Schrijf je naam onderaan dit blad

Cursus KeyCreator. Oefening 12: Perspectief in 2D

Een eerste applicatie

Kleuren met getallen Afbeeldingen weergeven

Omschrijf bij ieder onderdeel van de methode de betekenis ervan. Java kent twee groepen van klassen die een GUI kunnen maken: awt en swing.

mailgroep photoshop Copyright Glanzende Sparkles Text Effect Het uiteindelijke resultaat Stap 1

Handleiding JCreator. Inhoud. Een Workspace en een eerste project maken


Gemeente Haarlemmermeer. Leer zelf je nieuwsbrief maken in YMLP. Opgesteld door: drs. Mariska I.R. Franse Datum: 6 en 11 juni 2013

HTML Graphics. Hans Roeyen V 3.0

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, uur

8 Word Art Teksten. De documentatie van deze API is te lezen in Bijlage P: WordArt Documentatie.

Tekenen met Floorplanner

Workshop 21. Curven tekenen.

Abstracte klassen & Interfaces

HvA Instituut voor Interactieve Media ActionScript 3.0

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing

OPDRACHTKAART. Thema: Prepress. Photoshop 2. Selecteren, verplaatsen en roteren PP Voorkennis: Introductie Photoshop (6.0) afgerond.

Informatica. Objectgeörienteerd leren programmeren. Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele

1. Klik in de menubalk op Bestand/Nieuw. In het nieuwe venster kies je voor: Klik op OK en een nieuw plaatje verschijnt.

Een gelinkte lijst in C#

GEOGEBRA 5. Ruimtemeetkunde in de tweede en derde graad. R. Van Nieuwenhuyze. Hoofdlector wiskunde aan HUB, Brussel. Auteur Van Basis tot Limiet.

INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN

Programmeren in C# Klassen schrijven

Figuur 1: Kiezen van het Template in sketchup

In BlueJ. Doe onderstaande met muis/menu s:

Simon de schildpad J van Weert 1

Belevingsdagen Leraar Informatica (BASO) Maak je eigen app! Belevingsdagen Thomas More - Elke Boonen

Figuur 1: Kiezen van het Template in sketchup

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Ga naar volgende website: product/downloads. Klik op EXE installer. Klik daarna op Download now

Datastructuren Werkcollege Intro

Programmeren in C# Interfaces. Hoofdstuk 23

ArcGIS Mobile ADF. Smart Client Applicaties voor ArcGIS Server Eva Dienske, Wim Ligtendag

P O W E R P O I N T - onderdeel van Microsoft Office 2000 pakket (nl) De Windows versies van Powerpoint kunnen onderling afwijken

de deur de schoorsteen het dak dak aanpassen bloempot schoorsteen bakstenen verkleinen &verfraaien...

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, uur

Design patterns Startbijeenkomst

WERKEN MET INKSCAPE. Klik op het logo van Inkscape om het programma te openen. Je ziet het volgende startscherm.

Zo vind u hierin de volgende documentatie over de klasse Applet: +----java.awt.panel java.applet.applet

FABSHEET VERSA LASERSNIJDER 40W

Herhalingsoefeningen

ASBAK in ALIBRE DESIGN

HANDLEIDING MICROSOFT POWERPOINT RADBOUD UNIVERSITEIT NIJMEGEN

Project: werkbladen opmaken in Excel

16 Toevoegen en bewerken van afbeeldingen en illustraties.

1. Open het programma KompoZer Het grote witte vlak is een nog lege webpagina. Deze gaan we nu van inhoud voorzien.

WETENSCHAPPEN oefeningen perspectief. LES 4 driepuntsperspectief foto. Matthias Dziwak Tobias Labarque Rinus Roelofs

Werken met lagen en attributen.

illustrator Alleen een hands- on.. LESBRIEVEN

Hoofdstuk 1: Tekenen in Excel-Word-PowerPoint

Dia, een programma voor het maken van diagrammen

Gebruikers handleiding. Lizard Configuration Manager ToolTip. Installatie. Instellen. Initieel instellen

Lijnen/randen en passe-partouts maken met Photoshop.

1. Laagstijlen (op basis van Photoshop CS2/CS3)

Tips & Trucs ArchiCAD : Instellingen Kozijnstaat wijzigen (NL+)

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

Courbois Software WebDesignEditor. WYSIWYG-Editor

Kruiwagen. Kijkwijzers maken (Office 2007) Jimi Gantois. Algemeen: Vermeld titel, doelgroep, jaartal, auteur, bron. Figuur: De tekst: jimi

Stappenplan voor een werkstuk in Word

Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET

Modelleren en Programmeren

INLEIDING TOT GEOGEBRA

Inhoud gereedschap... 3 losmaken... 3 gereedschap naast elkaar en onder elkaar... 3 werkruimte... 4 opnieuw instellen... 4 gebruikersinterface...

Gemaakt door Santy Nicole

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

Beschrijvings SW gebruikers handleiding (V1.1) Voor Apple Macintosh computers Voor Macintosh Computer

Windows-applicatie. using System.Windows.Forms; using System.Drawing; class HalloWin1 { static void Main ( )

int getaantalpassagiers{): void setaantalpassagiers(int aantalpassagiers);

Project network. Gebaseerd op paragrafen , uit het boek. We simuleren een sociaal netwerk

Maximale oppervlakte van een rechthoek ingeschreven in een cirkel

public Bier ( string N, double P, Brouwerij B) { Naam = N; AlcoholPerc = P; Brouwer = B;

Zo gaat jouw kunstwerk er straks uitzien. Of misschien wel heel anders.

Handleiding. HB-plus Samenwerken Handleiding voor gebruikers

Tentamen Object Georiënteerd Programmeren TI januari 2013, Afdeling SCT, Faculteit EWI, TU Delft

HANDLEIDING. Juwelen Maken. met een laser cutter

Grafisch programmeren met GTK

Transcriptie:

IV. GDI en device context GDI is een afkorting van windows Graphic Device Interface. Het bevat klassen en structuren om grafische vormen, teksten lijnkleur, klijndikte, enz. te definiëren. De device context is de mogelijk om te tekenen op scherm of printer, zonder de eigenschappen van dat apparaat te kennen. A. Grafische vormen Er zijn vele grafische vormen mogelijk. Een klein overzicht hebben we samengebracht in onderstaande oefening Oef04a Oef04a: grafische vormen Maak een leeg project aan. Alleen de OnPaint() methode is nodig, vermits we hier alle tekenopdrachten plaatsen. De andere bestanden zijn dus weer hetzelfde als voorheen. En hier is de code: CMainFrame.h: /********************************** Oef04a.h - CMainFrame.h ***********************************/ #include <afxwin.h> class CMainFrame: public CFrameWnd private: Visual C++ en MFC ir. C. Daniels 28

public: CMainFrame(); //constructor //afhandeling van de window-berichten afx_msg void OnPaint(); //handelt WM_PAINT af DECLARE_MESSAGE_MAP(); ; CMainFrame.cpp: /***************************************** Oef04a - CMainFrame.cpp ******************************************/ #include "CMainFrame.h" BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd) //het bericht //roept deze functie aan ON_WM_PAINT() //void OnPaint() END_MESSAGE_MAP() CMainFrame::CMainFrame() //constructor Create(NULL, "Oef04a Grafische vormen", WS_OVERLAPPEDWINDOW, CRect(0,0,400,500) ); CenterWindow(); void CMainFrame::OnPaint() CPaintDC dc(this); dc.selectstockobject(null_brush); /********** lijn **********/ dc.moveto(10,50); dc.lineto(125,25); dc.textout(10,20,"line"); /****************** open structuren *******************/ //Polylijn *********************************** CPoint pl[]= CPoint(220,80), CPoint(270,120), CPoint(320,50), CPoint(370,100),; dc.polyline(pl,4); dc.textout(220,50,"polyline"); //PolyBezier ******************************** //aantal punten moet 3*n+1 zijn // n = aantal 'splines' Visual C++ en MFC ir. C. Daniels 29

CPoint pb[]= CPoint(140,180), CPoint(190,220), CPoint(240,120), CPoint(290,200), CPoint(330,280), CPoint(370,120), CPoint(300,200),; dc.polybezier(pb,7); //dc.polyline(pb,7); dc.textout(200,200,"polybezier"); /************************* gesloten structuren *************************/ //rechthoeken ******************************** CRect r(10,60,190,150); //methode 1 dc.rectangle(r); dc.rectangle(30,90,100,250); //methode 2 dc.textout(15,70,"rectangle"); //afgeronde rechthoek ************************ CRect r1(10,300,140,450); CPoint p(30,30); dc.roundrect(r1,p); //dc.rectangle(r1); dc.textout(30,370,"roundrect"); //veelhoek ************************************* CPoint pp[]= CPoint(200,250), CPoint(250,230), CPoint(300,300), CPoint(290,350), CPoint(210,320) ; dc.polygon(pp,5); dc.textout(170,330,"polygon"); //Arc, Chord, Pie ******************************* CRect r2(cpoint(200,370),cpoint(350,450)); //omsluitende rhoek //dc.rectangle (r2); CPoint cpt = r2.centerpoint(); //centrum rechthoek CPoint startpt = cpt + CPoint(2,-16); //beginpunt boog dc.moveto(cpt);dc.lineto(startpt); CPoint eindpt = cpt + CPoint(-20,10); //eindpunt boog dc.moveto(cpt);dc.lineto(eindpt); //kies een van de 3 onderstaande: dc.arc(r2,startpt,eindpt); //dc.chord(r2,startpt,eindpt); //dc.pie(r2,startpt,eindpt); dc.textout(280,420,"arc Chord Pie"); Test het programma uit! Visual C++ en MFC ir. C. Daniels 30

Als u sommige commentaar (bij PolyBezier, of Arc bv.) kunt u beter zien, hoe de figuur wordt bepaald door de omsluitende rechthoeken of lijnen. B. Lijnstijlen, dikte en kleuren Om het uiterlijk van een lijn aan te passen moeten we een CPen-object aanmaken. Daarvoor gebruiken we: a - de methode CreatePen(lijnstijl, dikte, kleur) b - een stockobject met SelectStockObject(object). Stockobjecten zijn een klein aantal voorgedefinieerde kleur- (en brush-) stijlen. Oef04b Lijnstijlen, kleuren en dikte Volgende oefening geeft enkele voorbeelden. Zoek aanvullende informatie op in de help! Alleen de code van CMainFrame moet aangepast: CMainFrame.cpp: /***************************************** Oef04b - CMainFrame.cpp lijn: stijl, kleur, dikte ******************************************/ #include "CMainFrame.h" BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd) ON_WM_PAINT() //void OnPaint() END_MESSAGE_MAP() CMainFrame::CMainFrame() //constructor Create(NULL,"Oef04b lijnen",ws_overlappedwindow, CRect(0,0,270,200)); CenterWindow(); Visual C++ en MFC ir. C. Daniels 31

void CMainFrame::OnPaint() CPaintDC dc(this); // lijnen CPen apen1; dc.selectstockobject(black_pen); //zwarte lijn dc.moveto(10,140); dc.lineto(250,0); //pen creatie in 2 stappen apen1.createpen(ps_solid,20,rgb(255,0,0)); //dik rood dc.selectobject(apen1); dc.moveto(10,10); dc.lineto(250,50); dc.selectstockobject(white_pen); //stock-pen wit dc.moveto(10,10); dc.lineto(250,50); //pen creatie in 1 stap CPen apen2(ps_dot,1,rgb(0,120,0)); dc.selectobject(apen2); dc.moveto(10,40); dc.lineto(250,80); //Groen puntjes CPen apen3; apen3.createpen(ps_dash,1,rgb(0,0,180)); dc.selectobject(apen3); dc.moveto(10,70); dc.lineto(250,110); //blauw streepjes dc.selectstockobject(black_pen); //zwarte lijn 2 dc.moveto(10,150); dc.lineto(250,10); C. Brush Een brush (Engels voor borstel ) vult de achtergrond op van gesloten figuren. We kunnen zowel een kleur als een stijl kiezen. De stijl en kleur van de randlijn worden bepaald door een CPen-object. Oefening Oef04c: Brush In deze oefeningen vindt u enkele voorbeelden van de CBrush class terug. Alleen de code in CMainFrame.cpp gaan we weer aanpassen. CMainframe.cpp: Visual C++ en MFC ir. C. Daniels 32

/******************************* Oef04c - CMainFrame.cpp Brush ********************************/ #include "CMainFrame.h" BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd) ON_WM_PAINT() //void OnPaint() END_MESSAGE_MAP() CMainFrame::CMainFrame() //constructor Create(NULL,"Oef04c Brush voorbeelden", WS_OVERLAPPEDWINDOW,CRect(0,0,270,290) ); CenterWindow(); void CMainFrame::OnPaint() CPaintDC dc(this); CRect r1(10,10,110,60); CBrush abr1; abr1.createsolidbrush(rgb(220,0,180)); default pen dc.selectobject(abr1); dc.rectangle(r1); //paarse rechthoek en r1 += CPoint(120,0); CPen apen1; apen1.createpen(ps_solid,5,rgb(180,230,0)); rand dc.selectobject(apen1); dc.rectangle(r1); //paars met dikke r1 += CPoint(0,70); //HATCH met rode rand CPen apen2; //pen - object voor de rand apen2.createpen(ps_solid,10,rgb(255,0,0)); CBrush abr2; //brush - object voor opvulling abr2.createhatchbrush(hs_cross,rgb(0,220,50)); //gekruist dc.selectobject(abr2); dc.selectobject(apen2); dc.rectangle(r1); r1 -= CPoint(120,0); //HATCH met blauwe rand CPen apen3; //pen - object voor de rand apen3.createpen(ps_solid,10,rgb(0,0,240)); CBrush abr3; //brush - object voor opvulling abr3.createhatchbrush(hs_fdiagonal,rgb(200,200,0)); //gearceerd dc.selectobject(abr3); dc.selectobject(apen3); dc.rectangle(r1); CPoint p[]=cpoint(50,150), CPoint(210,180), CPoint(30,220); //veelhoek Visual C++ en MFC ir. C. Daniels 33

CPen apen4; //pen - object voor de rand apen4.createpen(ps_solid,5,rgb(0,220,150)); CBrush abr4; //brush - object voor opvulling abr4.createhatchbrush(hs_vertical, RGB(220,100,200)); //gearceerd dc.selectobject(abr4); dc.selectobject(apen4); dc.polygon(p,3); D. Penstijlen PS_NULL en PS_INSIDEFRAME Als u in een figuur dikke randlijnen heeft, kunt u zelf bepalen, hoe deze randlijn getekend wil: ofwel op de rand, of echt in de figuur. Onderstaand voorbeeld maakt dit duidelijk. Oef04d: PS_NULL en PS_INSIDEFRAME Hieronder een voorbeeld dat ook dit aspect duidelijker maakt: CMainFrame.cpp: /***************************************** Oef04d - CMainFrame.cpp PS_NULL PS_INSIDEFRAME ******************************************/ #include "CMainFrame.h" BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd) //het bericht //roept deze functie aan ON_WM_PAINT() //void OnPaint() END_MESSAGE_MAP() CMainFrame::CMainFrame() //constructor Create(NULL, "Oef04d PS_NULL PS_INSIDEFRAME", WS_OVERLAPPEDWINDOW, CRect(0,0,350,280) ); CenterWindow(); Visual C++ en MFC ir. C. Daniels 34

void CMainFrame::OnPaint() CPaintDC dc(this); // default dc.selectstockobject(ltgray_brush); CRect r(20,20,160,100); dc.rectangle(r); dc.textout(60,50,"default"); CPen p1(ps_null,0,rgb(0,0,0)); r += CPoint(170,0); dc.selectobject(p1); dc.rectangle(r); dc.textout(230,50,"ps_null"); CPen p2(ps_solid,20,rgb(255,0,0)); r += CPoint(-170,100); dc.selectobject(p2); dc.rectangle(r); dc.textout(60,150,"ps_solid"); CPen p3(ps_insideframe,20,rgb(255,0,0)); r += CPoint(170,0); dc.selectobject(p3); dc.rectangle(r); dc.textout(200,150,"ps_insideframe"); E. Tekstkleuren Ook de tekstkleuren kunnen aangepast worden. De tekstkler met SetTextColor() en de achtergrondkleur van de tekst (niet van de client area!) met SetBkColor() Visual C++ en MFC ir. C. Daniels 35

Oef04e SetTextColor() en SetBkColor() En hieronder de code: CMAinFrame.cpp: /******************************* Oef04e - CMainFrame.cpp Tekstkleuren ********************************/ #include "CMainFrame.h" BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd) //het bericht //roept deze functie aan ON_WM_PAINT() //void OnPaint() END_MESSAGE_MAP() CMainFrame::CMainFrame() //constructor Create(NULL, "Oef04e Tekstkleuren", WS_OVERLAPPEDWINDOW, CRect(0,0,400,250) ); CenterWindow(); void CMainFrame::OnPaint() CPaintDC dc(this); CPen p(ps_null,0,rgb(0,0,0)); dc.selectobject(p); dc.selectstockobject(ltgray_brush); dc.rectangle(50,10,100,200); dc.textout(2,30,"aabbwwii 012345 - Default Font"); dc.settextcolor(rgb(255,0,0)); dc.setbkcolor(rgb(180,255,180)); CFont* pfont=(cfont *)dc.selectstockobject(system_font); dc.textout(2,55,"aabbwwii 012345 - System Variable-pitch Font"); dc.settextcolor(rgb(255,255,0)); dc.setbkcolor(rgb(80,80,255)); dc.selectstockobject(system_fixed_font); dc.textout(2,80,"aabbwwii 012345 - System Fixed-pitch Font"); dc.settextcolor(rgb(192,0,0)); dc.setbkcolor(rgb(192,255,192)); dc.selectstockobject(ansi_var_font); dc.textout(2,105,"aabbwwii 012345 - ANSI Variable-pitch Font"); dc.setbkmode(transparent); dc.selectstockobject(ansi_fixed_font); dc.textout(2,130,"aabbwwii 012345 - ANSI Fixed-pitch TRANSPARENT"); Visual C++ en MFC ir. C. Daniels 36

dc.selectobject(pfont); dc.setbkmode(opaque); dc.selectstockobject(system_fixed_font); dc.textout(2,155,"aabbwwii 012345 - OPAQUE"); F. Fonts gebruiken Een tekstfont is een vrij ingewikkeld object. De CreateFont() methode vraagt niet minder dan 14 parameters. Zoek deze eens op in de help. Oef04f Oefening over letterfonts Nu passen wel zowel CMainFrame.h als CMainFrame.cpp aan: CMainFrame.h /********************************** Oef04f.h - CMainFrame.h Fonts ***********************************/ #include <afxwin.h> class CMainFrame: public CFrameWnd private: CFont fonttimesnr; CFont fontarial; CFont fontcomic; public: CMainFrame(); //constructor afx_msg void OnPaint(); DECLARE_MESSAGE_MAP(); ; Visual C++ en MFC ir. C. Daniels 37

CMainFrame.cpp: /******************************* Oef04e - CMainFrame.cpp Tekstkleuren ********************************/ #include "CMainFrame.h" BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd) //het bericht //roept deze functie aan ON_WM_PAINT() //void OnPaint() END_MESSAGE_MAP() CMainFrame::CMainFrame() //constructor Create(NULL, "Oef04f Fonts", WS_OVERLAPPEDWINDOW, CRect(0,0,350,250) ); CenterWindow(); // Verschillende manier om fonts te definiëren // Manier 1 (eenvoudig) fonttimesnr.createpointfont(220,"times New Roman"); // manier 2 (velden in een LOGFONT specifiëren) // een LOGFONT heeft 14 velden! LOGFONT lfarial; //Zet alle velden op nul om te straten ::ZeroMemory (&lfarial,sizeof(lfarial)); lfarial.lfheight=250; //puntgrootte =25.0 lfarial.lfweight=fw_bold; //=700 FW_MEDIUM=500 lfarial.lfitalic=true; lfarial.lfunderline=true; lfarial.lfescapement=-3500; //draaien over -35,00 graden ::lstrcpy(lfarial.lffacename,"arial"); //vgl. strcpy) fontarial.createpointfontindirect(&lfarial); //we kunen de grootte ook in pixels geven ipv in punten //met CreateFontIndirect LOGFONT lfcomic; ::ZeroMemory (&lfcomic,sizeof(lfcomic)); lfcomic.lfheight=30; //30 pixels hoog lfcomic.lfweight=fw_light; lfcomic.lfitalic=false; lfcomic.lfunderline=false; lfcomic.lfescapement=-200; //draaien over 40,0 graden ::lstrcpy(lfcomic.lffacename,"comic Sans MS"); fontcomic.createfontindirect(&lfcomic); void CMainFrame::OnPaint() CPaintDC dc(this); Visual C++ en MFC ir. C. Daniels 38

dc.setbkmode(transparent); //manier 1 CFont* pfontdefault = dc.selectobject(&fonttimesnr); dc.textout(5,5,"times New Roman"); // bereken tekstgrootte CSize size=dc.gettextextent("times New Roman"); CRect r = CRect(CPoint(5,5), CPoint (5+size.cx,5+size.cy)); dc.selectstockobject(null_brush); dc.rectangle(r); //manier 2 met LOGFONT dc.selectobject(&fontarial); dc.textout(12,50,"arial"); //grootte in pixels dc.selectobject(&fontcomic); dc.textout(25,100,"comic Sans MS"); dc.selectobject(pfontdefault); dc.textout(100,90,"default font!"); //Informatie over het font opvragen TEXTMETRIC tm; //heeft 20 member variabelen... dc.gettextmetrics(&tm); CString s; s.format("hoogte: %d, Gem.letterbreedte: %d", tm.tmheight,tm.tmavecharwidth); dc.textout(100,110,s); G. Een windowklasse registreren Misschien heeft u zich al afgevraagd waarom we nog niet de achtergrondkleur van de cleint area veranderd hebben, maar wel bijna alle andere kleuren. Dit komt omdat we gebruik maken van de default- look van een window-applicatie, aangeduid door de parameter NULL in de Create-methode vanhet venster: Create(NULL, Oef04...,WS_OVERLAPPEDWINDOW,...); Als we zelf onze eigen layout willen bepalen, moeten we een windowklasse registreren, zoals dat heet. Eigenlijk is dat geen klasse maar een structuur, maar wordt altijd windowclass genoemd. Pas de CMainFrame-constructor aan als volgt, om de achtergrondkleur te wijzigen: CMainFrame::CMainFrame() //constructor //een window'klasse' registreren CString MijnWinClass; //naam van de kalsse MijnWinClass =AfxRegisterWndClass( CS_DBLCLKS CS_HREDRAW, AfxGetApp()->LoadStandardCursor(IDC_ARROW), ::CreateSolidBrush(RGB(100,255,100)), Visual C++ en MFC ir. C. Daniels 39

); AfxGetApp()->LoadStandardIcon(IDI_APPLICATION) //Creëer nu het window object gebaseerd op 'onze' klasse Create( MijnWinClass, "Oef04f Fonts", WS_OVERLAPPEDWINDOW, CRect(0,0,350,250) );...enz. En nu heeft ons programma een mooie lichtgroene achtergrondkleur: H. Vijf manieren om een DC te creëren Voor we kunnen tekenen, moeten we eerst de device context instantiëren. Er bestaan hiervoor vijf manieren, naargelang de plaats waar je wil tekenen. In OnPiant() In de functie OnPaint(). Deze verwijdert het WM_PAINT bericht uit de berichtenstroom. Methode 1 void CMainFrame::OnPaint() CPaintDC dc(this);...// doe al het tekenwerk... Methode 2 void CMainFrame::OnPaint() PAINTSTRUCT ps; CDC* pdc = BeginPaint(&ps); //ps bevat belangrijke info over //invalid area // doe al het tekenwerk... pdc->textout(1,2, Hallo ); Visual C++ en MFC ir. C. Daniels 40

//of in een zelfgemaakte functie Teken() : Tekenen(pDC); //geeft pointer door EndPaint(&ps); //niet vergeten In alle ander functies van CMAinFrame Hier zijn ook twee mogelijkheden: Methode 3 void CMainFrame::AndereFunctie() CClientDC dc(thsi); dc.textout(1,2,... Methode 4 void CMainFrame::AndereFunctie() CDC* pdc = GetDC(); pdc->dc.textout(1,2,... ReleaseDC(pDC); In een andere klasse als CMainFrame Stel dat we gegevens willen uivoeren naar de client area vanuit de klasse CAndere met de methode Display(): void CAndere::Display() CWnd* pwnd = AfxGetMainWnd(); CDC* pdc = pwnd->getdc(); pdc->textout(1,2, Hallo ); pwnd->releasedc(pdc); Visual C++ en MFC ir. C. Daniels 41