From 4301543533261a6c58abf3a9a9a9908d31d636c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Zalewski?= Date: Thu, 25 May 2006 23:46:53 +0200 Subject: [PATCH] comctl32: header: Implement HDM_CREATEDRAGIMAGE. --- dlls/comctl32/header.c | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/dlls/comctl32/header.c b/dlls/comctl32/header.c index 81a8b9227e1..f034e7baf58 100644 --- a/dlls/comctl32/header.c +++ b/dlls/comctl32/header.c @@ -875,8 +875,37 @@ HEADER_SendClickNotify (HWND hwnd, UINT code, INT iItem) static LRESULT HEADER_CreateDragImage (HWND hwnd, WPARAM wParam) { - FIXME("empty stub!\n"); - return 0; + HEADER_INFO *infoPtr = HEADER_GetInfoPtr(hwnd); + HEADER_ITEM *lpItem; + HIMAGELIST himl; + HBITMAP hMemory, hOldBitmap; + HDC hMemoryDC; + HDC hDeviceDC; + int height, width; + + if (wParam < 0 || wParam >= infoPtr->uNumItem) + return FALSE; + lpItem = &infoPtr->items[wParam]; + width = lpItem->rect.right - lpItem->rect.left; + height = lpItem->rect.bottom - lpItem->rect.top; + + hDeviceDC = GetDC(NULL); + hMemoryDC = CreateCompatibleDC(hDeviceDC); + hMemory = CreateCompatibleBitmap(hDeviceDC, width, height); + ReleaseDC(NULL, hDeviceDC); + hOldBitmap = SelectObject(hMemoryDC, hMemory); + SetViewportOrgEx(hMemoryDC, -lpItem->rect.left, -lpItem->rect.top, NULL); + HEADER_DrawItem(hwnd, hMemoryDC, wParam, FALSE); + hMemory = SelectObject(hMemoryDC, hOldBitmap); + DeleteDC(hMemoryDC); + + if (hMemory == NULL) /* if anything failed */ + return FALSE; + + himl = ImageList_Create(width, height, ILC_COLORDDB, 1, 1); + ImageList_Add(himl, hMemory, NULL); + DeleteObject(hMemory); + return (LRESULT)himl; }