Re: BitCount Help
Kodiak <hoover_richard@hotmail.com> wrote:
int main()
{
HWND hWnd;
RECT rcWnd;
hWnd = FindWindow("Notepad", "Untitled - Notepad");
GetWindowRect(hWnd, &rcWnd);
int x = rcWnd.right - rcWnd.left;
int y = rcWnd.bottom - rcWnd.top;
hDC = GetDC(hWnd);
hBitmapDC = CreateCompatibleDC(hDC);
hBitmap=CreateCompatibleBitmap(hDC,x,y);
Note that GetWindowRect returns the window rectangle - a rectangle that
includes caption and borders. GetDC returns an HDC representing client
area only. The bitmap you create is too large. Moreover, BitBlt below
probably fails because the source HDC is too small. You want
GetClientRect in place of GetWindowRect.
BitBlt(hBitmapDC,0,0,x,y,hDC,rcWnd.left,rcWnd.top,SRCCOPY);
Regardless of where the window is positioned on the screen (which is
what GetWindowRect tells you), the HDC retrieved with GetDC is set up so
that top left corner of the client area is always at (0, 0). Your
coordinates are all wrong.
if(GetDIBits(hBitmapDC,hBitmap,0,0,data,LPBITMAPINFO(lpbih),DIB_RGB_COLORS)??)
You ask to retrieve 0 (zero) scan lines - that is, to retrieve no, I
repeat no, actual pixel data. Which is of course what you get. Your
buffer is still filled with zeros you initialized it to.
for(int i=0; i<length; i++)
{
sum += (DWORD)data[i];
}
You are only adding up a quarter of all bytes in the buffer. data[i]
refers to i-th byte, not i-th DWORD, cast notwithstanding. You probably
meant something like ((DWORD*)data)[i]
ReleaseDC((HWND)hWnd, hDC);
DeleteDC(hDC);
You've already released hDC, what is DeleteDC supposed to do?
--
With best wishes,
Igor Tandetnik
With sufficient thrust, pigs fly just fine. However, this is not
necessarily a good idea. It is hard to be sure where they are going to
land, and it could be dangerous sitting under them as they fly
overhead. -- RFC 1925