Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 451
  • Last Modified:

How do you erase the CRectTracker and its styles?

Hi. I have a view which contains multiple static fields.  When the user clicks on a static field, I add a CRectTracker over the static field.  If there is another mouse click outside of the control with the CRectTracker, I want to delete the rect tracker and erase all remnants of it.  I have tried simply deleting the rect tracker, redrawing the window, invalidating its rect, etc.  Here is what I've tried:

// try clearing it's style
tracker->m_nStyle &= ~CRectTracker::hatchInside;
tracker->m_nStyle &= ~CRectTracker::dottedLine;
tracker->m_nStyle &= ~CRectTracker::resizeOutside;

// try invalidating its rect
CRect rectTrue;
tracker->GetTrueRect(&rectTrue);
InvalidateRect(rectTrue, TRUE);

// try redrawing the window it was used for
CWnd *trackingWnd = tracker->GetTrackingWnd();
trackingWnd->RedrawWindow();

// now just try deleting it.
delete tracker;
tracker = NULL;

Unfortunatley, with all of this, I still end up with the outline of the tracker on the screen.  I don't want to redraw the entire view because there is too much screen flicker.  Anybody have any ideas?

Thanks!
0
mromeo
Asked:
mromeo
  • 3
  • 3
1 Solution
 
AndyAinscowFreelance programmer / ConsultantCommented:
I don't see what function you are actually using (Draw, TrackRubberBand..) to draw it in the first place.

One thing you could try is to use a TRACE to find out the co-ordinates when you start the track and when you use this code
tracker->GetTrueRect(&rectTrue);
InvalidateRect(rectTrue, TRUE);

You may have a mis-match of screen and client co-ordinates
0
 
mromeoAuthor Commented:
I use Draw to draw the tracker.
0
 
mromeoAuthor Commented:
Tried your TRACE suggestion.  The coordiantes are exactly the same.  The only thing that seems to get the tracker to erase is a call to RedrawWindow, which redraws the entire CView.
0
The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

 
AndyAinscowFreelance programmer / ConsultantCommented:
give this a try


CRect rectTrue;
tracker->GetTrueRect(&rectTrue);

rectTrue.InflateRect(1, 1);   //make the rect a little bit larger
InvalidateRect(&rectTrue, TRUE);   //note the & - it wants a pointer to a rect

UpdateWindow();
0
 
mromeoAuthor Commented:
YESSSS!!  All it was was the rect param.  I failed to pass a pointer to the rect.  Sometimes the simplest things can make you crazy...Thanks for your help.
0
 
AndyAinscowFreelance programmer / ConsultantCommented:
Yr welcome.  (I'd not seen it either at first glance!)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

  • 3
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now