CRectTracker problems
Following useful advice from here, I am now "enjoying" my first date with
CRectTracker.
If I ask it for the hatched style (CRectTracker::hatchInside) then it draws
the hatching in a rather low contrast, using diagonals of colour black and
'darkened-background'.
On a white area this is black and grey; on a yellow area it is black and
muddy-brown.
The hatching is just about discernible but with the edge only shown hatched
(CRectTracker::hatchedBorder style) the contrast is so low it looks solid.
Has anyone had this problem? Solved it?
[More detailed info below sig.]
Dave
-- David Webber
Mozart Music Software
http://www.mozart.co.uk
For discussion and support see
http://www.mozart.co.uk/mozartists/mailinglist.htm
The CRectTracker::Draw() function seems rather inflexible in this regard.
Here's a chunk of it:
// hatch inside
if ((m_nStyle & hatchInside) != 0)
{
pTemp = pDC->SelectStockObject(NULL_PEN);
if (pOldPen == NULL)
pOldPen = (CPen*)pTemp;
pTemp = pDC->SelectObject(CBrush::FromHandle(_afxHatchBrush));
if (pOldBrush == NULL)
pOldBrush = (CBrush*)pTemp;
pDC->SetBkMode(TRANSPARENT);
nOldROP = pDC->SetROP2(R2_MASKNOTPEN);
pDC->Rectangle(rect.left+1, rect.top+1, rect.right, rect.bottom);
pDC->SetROP2(nOldROP);
}
Is the problem in the rop code?
"R2_MASKPENNOT Pixel is a combination of the colors common to both the pen
and the inverse of the screen (final pixel = (NOT screen pixel) AND pen). "
What does this do for a NULL Pen???
==============
The bitmap used to create _afxHatchBrush (called from the CRectTracker
constructor) looks ok to me: It is a monochrome diagonal stripy thing:
if (_afxHatchBrush == NULL)
{
// create the hatch pattern + bitmap
WORD hatchPattern[8];
WORD wPattern = 0x1111;
for (int i = 0; i < 4; i++)
{
hatchPattern[i] = wPattern;
hatchPattern[i+4] = wPattern;
wPattern <<= 1;
}
HBITMAP hatchBitmap = CreateBitmap(8, 8, 1, 1, hatchPattern);
if (hatchBitmap == NULL)
{
AfxUnlockGlobals(CRIT_RECTTRACKER);
AfxThrowResourceException();
}
// create black hatched brush
_afxHatchBrush = CreatePatternBrush(hatchBitmap);
DeleteObject(hatchBitmap);
if (_afxHatchBrush == NULL)
{
AfxUnlockGlobals(CRIT_RECTTRACKER);
AfxThrowResourceException();
}
}