Страница: 1 |
Страница: 1 |
Вопрос: GetDC штоль?!
Добавлено: 20.11.06 11:21
Автор вопроса: VβÐUηìt | Web-сайт:
Я решил написать одну прогу, для нее нужно считывать пиксели с экрана. Попробовал просто центральный пиксел узнать, но она че-то не работает:
Dim hWndSrc As Long
Dim hSrcDc As Long
Dim l As Long
hWndSrc = GetDesktopWindow()
hSrcDc = GetDC(hWndSrc)
Dim X As Integer
Dim y As Integer
X = Screen.Width / Screen.TwipsPerPixelX / 2
y = Screen.Height / Screen.TwipsPerPixelY / 2
l = GetPixel(hSrcDc, X, y)
По идее l должно быть равно цвету, а оно почему-то равно -1. Вродебы глючит GetDC, но я без понятий, как это исправить. Помогите, плз!
Заранее спасибо.
Ответы
Всего ответов: 3
Номер ответа: 1
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #1
Добавлено: 20.11.06 13:14
Используй вместо GetDC GetWindowDC:
Dim hSrcDc As Long
Dim l As Long
hWndSrc = GetDesktopWindow()
hSrcDc = GetWindowDC(hWndSrc)
Dim x As Integer
Dim y As Integer
x = Screen.Width / Screen.TwipsPerPixelX / 2
y = Screen.Height / Screen.TwipsPerPixelY / 2
l = GetPixel(hSrcDc, x, y)
Print l, x, y
Номер ответа: 2
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #2
Добавлено: 21.11.06 11:40
Спасиб., но есть одно НО: После пяти минут работы у моей проги исчезайэт заголовок, изредко появляется кнопка закрытия, а рабочая область формы обращается в какой-то тупой овал!
Шо за сей побочный эффект?!
Номер ответа: 3
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #3
Добавлено: 21.11.06 14:35
P.S Вообще, когда работаешь с дескриптором рабочего стола, жди чудес, т. к. он возвращает как бы скриншот всего монитора... и здесь не только заголовок окна пропасть может.
Гляди:
Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
Sub CP(hdc As Long, X1 As Integer, X2 As Integer, Y1 As Integer, Y2 As Integer, COLOR As Long)
Dim x As Integer
Dim y As Integer
For x = X1 To X2
For y = Y1 To Y2
SetPixel hdc, x, y, COLOR
Next y
Next x
End Sub
Private Sub Command1_Click()
Timer1.Enabled = True
End Sub
Private Sub Command2_Click()
Unload Me
End Sub
Private Sub Timer1_Timer()
CP GetWindowDC(GetDesktopWindow), 0, 1024, 0, 256, RGB(255, 255, 255)
CP GetWindowDC(GetDesktopWindow), 0, 1024, 256, 512, RGB(0, 0, 255)
CP GetWindowDC(GetDesktopWindow), 0, 1024, 512, 768, RGB(255, 0, 0)
End Sub