[MFC/C++] Text Negatief tekenen?

Pagina: 1
Acties:

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 02-01 05:18
Hoi allemaal,

Bij een MFC applicatie in C++ kun je op een CDC* PDC object tekenen,
niet alleen dat, maar met een commando PDC->SetROP2(R2_NOT); zorgt dat je lijnen allemaal het negatieve van het scherm worden.
(precies wat ik nodig heb, doormiddel van een teken nogmaals op het scherm te tekenen op dezelfde plaats, maar dan negatief, wis je het snel en netjes)

Erg mooi allemaal, maar nu wil ik ook tekst op dezelfde manier laten tekenen en wissen.
Maar op de eens of andere manier werkt het niet voor tekst.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
   CPen pen, *pOldPen;

   //select pen/brush:
   pen.CreatePen(PS_SOLID,1,RGB(255,255,255));
   pOldPen = PDC->SelectObject(&pen);
   PDC->SelectStockObject(NULL_BRUSH);

   PDC->SetROP2(R2_NOT);

   // logo
   PDC->SetTextAlign(TA_CENTER);
   PDC->TextOut(m_X+20,m_Y+25,"&");
   // output
   PDC->MoveTo(m_X+40,m_Y+30);
   PDC->LineTo(m_X+45,m_Y+30);
   // input2
   PDC->MoveTo(m_X-1,m_Y+45);
   PDC->LineTo(m_X-5,m_Y+45);

   //verwijder pen/brush:
   PDC->SelectObject(pOldPen);
   ::DeleteObject(pen);
Nou hoop ik natuurlijk dat er een simpele oplossing is, want ik vind die tekst er veel mooier uitzien dan zelf getekende tekst met ljintjes...

Ik heb heel google afgezocht (en ook GoT, CodeProject, enz...) maar nergens lijken ze tekst negatief (van het scherm) te kunnen tekenen.

Mijn vraag is nu dus, kan ik überhaupt wel tekst negatief laten tekenen?
zo nee, is er misschien een andere oplossing om dit netjes te doen?
ik geloof niet dat ik de eerste ben die hier tegenaan loop, maar ik kon er echt niets over vinden.

WhatPulse! - Rosetta@Home - Docking@Home


  • staefke
  • Registratie: December 2003
  • Laatst online: 19-05 22:28
volgens mij kun je bij codeguru of codeproject wel een MemDC class downloaden (of gebruik createCompatibleDC) waarin je eerst de hele zooi tekent. Als je hem daarna bitblit naar je target DC met de juiste ROP dan moet het volgens mij werken.

duh ?


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Text tekenen stoort zich niet aan de blitting modes, maar puur aan de opties die je meegeeft in DrawTextEx/TextOut etc. Je moet dus handmatig de background color op de tekstkleur zetten en vice versa, en dan met ETO_OPAQUE modus tekenen.

Oh zie net dat je absolute inverse wil, dan heb je hier niets aan, pardon :)

[ Voor 15% gewijzigd door curry684 op 02-06-2004 10:13 ]

Professionele website nodig?


  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 02-01 05:18
curry684 schreef op 02 juni 2004 @ 10:12:
Oh zie net dat je absolute inverse wil, dan heb je hier niets aan, pardon :)
Dus er is geen nette manier om mijn text absolute inverse te tekenen? :'(

Ik ben al bijna alleen met dit stuk een week bezig, lekker weggegooide tijd.
en al die tekens met lijntjes maken ziet er niet uit...

Wat vreemd dat ze het voor lijnen dan wel mogelijk gemaakt hebben en voor text niet :(

WhatPulse! - Rosetta@Home - Docking@Home


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

KompjoeFriek schreef op 02 juni 2004 @ 16:55:
[...]
Dus er is geen nette manier om mijn text absolute inverse te tekenen? :'(

Ik ben al bijna alleen met dit stuk een week bezig, lekker weggegooide tijd.
en al die tekens met lijntjes maken ziet er niet uit...

Wat vreemd dat ze het voor lijnen dan wel mogelijk gemaakt hebben en voor text niet :(
Dat is voor zover ik weet te wijten aan de feitelijke drivers en grafische kaarten: die exposen wel methodes om lijnen en basale geometrische vormen te tekenen, maar hebben logischerwijs geen benul van fonts en tekst. De Raster Operation (ROP) modes mappen redelijk linea recta door de HAL heen richting de videokaart, maar font-werk moet Windows allemaal intern doen.

Tis ook redelijk exotisch hoor, ik kan me niet herinneren dat ik deze feature in een jaar of 7~8 aan Windows GUI-development ooit heb gemist. Je kunt natuurlijk ook nog zoals staefke aangaf op een memory DC tekenen en die vervolgens middels BitBlt met SRCINVERT als ROP overtekenen, zou moeten werken.

Professionele website nodig?


  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 02-01 05:18
Ok, ik zal eens kijken of dat MemDC werkt.

Bedankt curry684 en staefke!

ik dacht even dat curry684 bedoelde dat staefke's methode _niet_ werkte :P

WhatPulse! - Rosetta@Home - Docking@Home

Pagina: 1