Re: SetPixel not working on Vista
On Oct 20, 10:46 am, Joseph M. Newcomer <newco...@flounder.com> wrote:
See below...
On Tue, 20 Oct 2009 09:09:44 -0700 (PDT), Paul <energymo...@gmail.com> wr=
ote:
Hi,
SetPixel on Vista is acting strange. Certain areas it cannot draw on.
If I draw the entire window, then we can see the areas it can draw to,
which is vertical areas/bars that are a few hundred pixels wide. The
code works fine on my XP PC. So I thought there might be some window
app behind it preventing it from drawing in certain areas, but found
nothing. Changing the desktop to a solid color did nothing. Any ideas
what could be causing this? Here's the code,
void CTest1View::OnPaint()
{
CPaintDC dc(this); // device context for painting
if(IsIconic()){
return;
}
long x,y;
for(y=0; y < 1024; y++) {
for(x=0; x < 1024; x++) {
dc.SetPixel(x,y,0xff);
}
}
}
***
I gather this is a test case to show the problem. This would be less t=
han ideal in
practice. (besides, 0xff is not a color value; you should use the RGB =
macro). But in any
case, I just ran this on Vista and got a solid rectangle.
****
and another example,
void CTest2View::OnPaint()
{
CPaintDC dc(this); // device context for painting
if(IsIconic()){
return;
}
long x,y;
PAINTSTRUCT ps;
BeginPaint(&ps);
****
This code is erroneous. You already have a PAINTSTRUCT which has been =
set, and the second
BeginPaint is nonsensical. What do you think CPaintDC is doing?
****> for(y=0; y < 1024; y++) {
for(x=0; x < 1024; x++) {
dc.SetPixel(x,y,0xff);
}
}
EndPaint(&ps);
****
Of course, since the BeginPaint is wrong, the EndPaint is also wrong.
****>}
Also I tried dc,
int save = dc.SaveDC(); // place this near start of code
...
dc.RestoreDC(save); // place this near end of code
***
Irrelevant.
****
Also I tried calling OnDraw the common way within OnPaint-- same
results.
****
Actually, you should not be doing any drawing in the OnPaint of a view; y=
ou should be
doing it exclusively in the OnDraw.
****
I've tried everything I know. Change the window size. Regardless, the
above code always draws vertical bars that are black, white, black,
white, about ~ 200 pixels per bar.
****
There's something missing in your description, because I was able to use =
the code you
wrote and I get a solid rectangle (I used RGB(255, 0, 0) and got a solid =
red rectangle)
joe
****
Thanks for any suggestions.
Paul
Joseph M. Newcomer [MVP]
email: newco...@flounder.com
Web:http://www.flounder.com
MVP Tips:http://www.flounder.com/mvp_tips.htm
As the other guy stated, it occurs in certain Vista packages, and only
when in certain theme modes.
Paul