Click to See Complete Forum and Search --> : When painting an elliptic custom control, the entire rect gets painted! Why?


April 2nd, 1999, 06:27 PM
Hello!

I have an owner-drawn (derived from CButton) control in my dialog box. In it's PreSubclassWindow function, I set it a new region (elliptic region) using SetWindowRgn. And here's the problem: although the control looks elliptic in the dialog box (I checked it with Spy++), when I do a simple draw like this:

dc.FillSolidRect(&myRect, RGB(0, 0, 0));
(from within "CSpecialButton::OnPaint" or something alike)

the entire rectangle gets painted in black; not only the elliptic shape!! The same happens with other draw functions.

If you have any idea what might be wrong, please post me a response or E-Mail: zivayalon@hotmail.com

Thanx! Ziv

Ryan Binns
September 8th, 1999, 10:10 PM
Try setting the window region AFTER the window has been subclassed. Also, make sure that you don't destroy the region after it has been passed to SetWindowRgn(). Windows does not make a copy of the region, so if you destroy it, Windows uses the default region - rectangular.

Ryan

Jason Teagle
September 9th, 1999, 02:01 AM
You have to set the region EVERY time you grab a new DC. Although you set it at the beginning, when you grab a DC for OnPaint() it does not have that clipping region in it (it is a new DC, they get recycled for all windows). You must explicitly set the region before painting.