D
juhu das geht!
vielen dank für deine Hilfe
ich hatt iwie gedacht, dass das nicht geht oder MFC wär oder so.. aber es funktioniert
so. für alle dies interessiert hier dann mal mein fertiger Code, der ein HDC in die Zwischenablage speichert:
HDC hdc;
HDC hdcMem;
int SizeX = 40;
int SizeY = 40;
/// Grafik malen
hdc = BeginPaint(hwnd,&ps);
Rectangle(hdc,10,10,30,30);
/// HDC -> HBITMAP
hdcMem = CreateCompatibleDC(hdc);
HBITMAP hbitmap = CreateCompatibleBitmap(hdc,SizeX,SizeY);
HGDIOBJ hOldBitmap=SelectObject(hdcMem,hbitmap);
BitBlt(hdcMem,0,0,SizeX,SizeY,hdc,0,0,SRCCOPY);
SelectObject(hdcMem,hOldBitmap);// nicht unbedingt nötig
DeleteDC(hdcMem);
///HBITMAP in Zwischenablage
OpenClipboard(hwnd);
EmptyClipboard();
SetClipboardData(CF_BITMAP,hbitmap);
CloseClipboard();
EndPaint(hwnd,&ps);
kann man natührlich auch noch in Funktionen packen:
HBITMAP HDC2HBITMAP(HDC hdc,int StartX,int StartY,int SizeX,int SizeY)
{
HDC hdcMem;
hdcMem = CreateCompatibleDC(hdc);
HBITMAP hbitmap = CreateCompatibleBitmap(hdc,SizeX,SizeY);
HGDIOBJ hOldBitmap=SelectObject(hdcMem,hbitmap);
BitBlt(hdcMem,0,0,SizeX,SizeY,hdc,StartX,StartY,SRCCOPY);
SelectObject(hdcMem,hOldBitmap);// nicht unbedingt nötig
DeleteDC(hdcMem);
return hbitmap;
}
HANDLE BITMAP2CLIPBOARD(HBITMAP hbitmap,HWND hwnd)
{
HANDLE hreturn;
OpenClipboard(hwnd);
EmptyClipboard();
hreturn = SetClipboardData(CF_BITMAP,hbitmap);
CloseClipboard();
return hreturn;
}
Damit wär das Thema erledigt und kann geschlossen werden.
MFG