Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > не работает GetPixel


Автор: Alexander777 5.1.2007, 20:47
В SDI заготовке я набрал такой код:

Код

void CTestPixelOperationsView::OnDraw(CDC* pDC)
{
    CTestPixelOperationsDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here

    COLORREF tsvet, former;
    RECT Rect;

    if((pDC->GetDeviceCaps(RASTERCAPS)&RC_BITBLT)!=RC_BITBLT) return;
    GetClientRect(&Rect);
    tsvet=RGB(0, 0, 255);
    former=pDC->SetPixel(Rect.left, Rect.top, tsvet);//возвращает 0xffffffff, но точку прорисовывает
    tsvet=pDC->GetPixel(Rect.left, Rect.top);//возвращает 0xffffffff
    
}



и GetPixel возвращает не заданное мной значение цвета, а 0xffffffff.
В чём тут может быть дело?

Автор: zkv 5.1.2007, 22:23
немного модифицированный ваш код:
Код

COLORREF tsvet, former;
    RECT Rect;
    if((pDC->GetDeviceCaps(RASTERCAPS)&RC_BITBLT)!=RC_BITBLT) return;
    GetClientRect(&Rect);
    tsvet=RGB(0, 0, 255);
    TRACE("\nvisible == %d",pDC->PtVisible( Rect.left, Rect.top ));
    former=pDC->SetPixel(Rect.left, Rect.top, tsvet);//возвращает 0xffffffff, но точку прорисовывает
    TRACE("\tformer == %x",former );
    tsvet=pDC->GetPixel(Rect.left, Rect.top);//возвращает 0xffffffff
    TRACE("\ttsvet == %x",tsvet );

немного потаскаем окно туды-сюды,
в окошке Output получаем нечто подобное:
visible == 1 former == ff0000 tsvet == ff0000
visible == 0 former == ffffffff tsvet == ffffffff
visible == 1 former == ff0000 tsvet == ff0000
visible == 0 former == ffffffff tsvet == ffffffff

комментарии нужны? smile

ps (DWORD) -1 == 0xffffffff, те GetPixel или SetPixel возвращают это при ошибке

Автор: Alexander777 7.1.2007, 01:45
Большое спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)