Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.07.2011, 16:10   #1
coopik
Новичок
Джуниор
 
Регистрация: 09.07.2011
Сообщений: 1
По умолчанию BITMAP окна по хендлу

Задачка написать функцию для сравниванию 2 битмапов. Функция принимает хендл окна игры в оконном режиме с которого нужно взять больший битмап и строку - имя файла второго,меншего битмапа. Открыть битмап из файла и записать его в буфер у меня выходит , но с битмапом окна ничего не получается . Помогите пожалуйста правильно взять битмап и записать в байтовый масив , как с малым битмапом.


Код:
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
using namespace std;
BYTE*         wndbuff       = NULL;
BYTE*         filebuff      = NULL;
BITMAP      wndbit;
BITMAP      filebit;
HDC           wnddc            = NULL;                  
RECT          coord;
HBRUSH    brush        = NULL;
void comparebitmaps(const HWND hWnd,const LPCWSTR filename)
{
    HDC dc = GetDC(hWnd);
    wnddc = ::CreateCompatibleDC(dc);
    RECT temprect ;
//    GetClientRect(hWnd,&temprect);
    //BitBlt(wnddc,0,0,1023,766,dc,0,100,SRCCOPY);
    HBITMAP hbitmap = (HBITMAP)::GetCurrentObject(wnddc, OBJ_BITMAP);
    GetObject(hbitmap, sizeof(BITMAP), &wndbit);
 
/*октрываю битмап из файла*/
    HBITMAP hloadedbitmap = (HBITMAP) LoadImage(NULL, filename, IMAGE_BITMAP, 0, 0,LR_LOADFROMFILE| LR_DEFAULTSIZE);
    GetObject(hloadedbitmap, sizeof(BITMAP), &filebit);
    FillMemory(&coord, 0L, sizeof(RECT));
    ////////////////////////////////////////////////////////*копирую в буфер сначала хендл битмапа окна , потом битмапа файла*///
    USHORT ialign = wndbit.bmBitsPixel >> 3;
    LONG isize = wndbit.bmWidth * wndbit.bmHeight *ialign;
    wndbuff = new BYTE[isize];
    LONG l = GetBitmapBits(hbitmap, isize ,(LPVOID) wndbuff);
    /*------------------------------------------------------*/
    USHORT salign = filebit.bmBitsPixel >> 3;
    LONG ssize = filebit.bmWidth * filebit.bmHeight * salign;
    filebuff = new BYTE [ssize];
    LONG n = GetBitmapBits(hloadedbitmap, ssize , (LPVOID)filebuff);
    /////////////////////////////////////////////////////////
    
    /*тут будет продолжение*/
}
int _tmain(int argc, _TCHAR* argv[])
{
    POINT p;
    GetCursorPos(&p);
    Sleep(30000);
    HWND hWnd = WindowFromPoint(p);
    if(!hWnd)
    {
        MessageBox(hWnd,_T("curr window not found"),_T("error"),MB_OK);
        exit(1);
    }
     comparebitmaps(hWnd, _T("sign.bmp"));
    
    
    
    
    return 0;
}
coopik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Проблема] Программное изменение заголовка чужого окна по хендлу процесс(EnumWindows) Человек_Борща Общие вопросы Delphi 8 08.01.2011 22:40
Определение размеров компонента и положения по хендлу Marsel737 Общие вопросы Delphi 10 03.05.2010 00:53
Узнать Caption по хендлу Bayazet Общие вопросы Delphi 1 05.02.2010 12:21
из-за чего появляется полоса (на скрине) при вставке BitMap в TImage? - Проблема с Bitmap Grey@2009 Мультимедиа в Delphi 2 02.01.2010 20:23
Как уничтожить окно по его хендлу VintProg Общие вопросы Delphi 5 10.11.2009 09:04