2013-12-26 4 views
0

Прямо сейчас у меня есть окно, которое полностью пустое желтое. По какой-то причине, когда я вызываю GetPixel(), я получаю только 0xFFFFFFFF (CLR_INVALID). Вот мой minimalized код:GetPixel() возвращает только FFFFFF

HWND _hwndPP = FindWindow(NULL, "Test Window"); 
COLORREF hdcScreen = GetDC(_hwndPP); 
printf("%X", GetPixel(hdcScreen, 10, 10)); 
ReleaseDC(_hwndPP, hdcScreen); 

EDIT: Измененное COLORREF к HDC, и это ничего не изменило. Да, я запускаю 64-битную систему. Означает ли это, что я не могу использовать эту функцию? Если да, то как я могу проверить цвет определенного пикселя?

+1

'hdcScreen' должен быть типа' HDC'. Кроме того, вы проверили возвращаемые значения (FindWindow и GetDC)? –

+1

Действительно ли он возвращает 0x00FFFFFF (чистый белый) или 0xFFFFFFFF ('CLR_INVALID') – 3Doubloons

+0

' GetDC' возвращает 'HDC', а не' COLORREF'. Вместо этого объявите переменную как «HDC» и передайте правильную переменную типа «HDC» в «GetPixel». В случае сомнений проверьте документацию в MSDN. –

ответ

0

Я собираюсь предположить, что вы используете 64-битную Windows.

GetDC() возвращает HDC, который в качестве указателя является 64-битным значением. Затем вы конвертируете его в COLORREF, обрезая DC до 32 бит. Когда вы запрашиваете у Win32 цвет вашего пикселя, это невозможно, потому что ваш HDC не хватает некоторых бит. GetPixel() затем возвращает CLR_INVALID или 0xFFFFFFFF, который вы интерпретируете как чистый белый, так как вы ожидали действительного цвета.

Относительно примечания, я также предполагаю, что ваш не минимизированный код содержит отливки от COLORREF. Как правило, вы должны редко (если не никогда) не использовать в коде Win32. Если вам нужно бросить, вы, вероятно, используете неправильный набор функций или неправильный тип аргументов.

+0

Редко литье? Как насчет ужаса '(HBRUSH) (COLOR_WINDOW + 1)? Конечно, большинство приманок скрыты за красивым (?) Макросом ('MAKEINTRESOURCE' ...), но их так много, что вы обязательно будете писать какие-то роли вручную ... – rodrigo

+0

@rodrigo: Это правило большой палец. Если вы применяете документированный трюк или используете предоставленный макрос, то, очевидно, все в порядке. Если вы закроете компилятор, то все начнет разваливаться. – 3Doubloons

Смежные вопросы