SetBitmapBits не устанавливает Captured HBITMAP в окне - PullRequest
0 голосов
/ 09 апреля 2011

Я хочу получить 500x500 HBITMAP моего экрана от 0x0 (вверху слева) и нарисовать его на моем окне. Здесь идет мой код. SaveBitmap() Сохраняет HBITMAP и работает отлично.

int scrnw = 500;
int scrnh = 500;

HDC shdc=GetWindowDC(NULL);
HWND win=WindowFromDC(shdc);

HDC cdc=CreateCompatibleDC(shdc);
HBITMAP temp=CreateCompatibleBitmap(shdc,scrnw,scrnh);
PAINTSTRUCT ps;

shdc=BeginPaint(win,&ps);
HBITMAP oldb=(HBITMAP)SelectObject(cdc,temp);
BitBlt(cdc,0,0,scrnw,scrnh,shdc,0,0,SRCCOPY);
SelectObject(cdc,oldb);
EndPaint(win,&ps);
char * buffer;
buffer=new char[scrnw*scrnh*4];
GetBitmapBits(temp,scrnw*scrnh*4,buffer);

SaveBitmap("C:\\scan.bmp", temp);

HDC hdc=GetWindowDC(hwnd);
HBITMAP scrn = CreateCompatibleBitmap(hdc,500,500);
SetBitmapBits(scrn,500*500*4,buffer);

Проблема в том, что захваченное изображение не рисуется в окне. Чего мне не хватает?

1 Ответ

0 голосов
/ 10 апреля 2011

shdc «забывает» экран, когда вы выполняете shdc=BeginPaint(), поэтому получить изображение некуда.

Пусть он останется с shdc=GetWindowDC(NULL) и используйте другой HDC для hdcMyPaint=BeginPaint(). После блита до cdc, блешь и до hdcMyPaint. Это должно сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...