Module: wine Branch: master Commit: 4301543533261a6c58abf3a9a9a9908d31d636c9 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=4301543533261a6c58abf3a9...
Author: Mikołaj Zalewski mikolaj@zalewski.pl Date: Thu May 25 23:46:53 2006 +0200
comctl32: header: Implement HDM_CREATEDRAGIMAGE.
---
dlls/comctl32/header.c | 33 +++++++++++++++++++++++++++++++-- 1 files changed, 31 insertions(+), 2 deletions(-)
diff --git a/dlls/comctl32/header.c b/dlls/comctl32/header.c index 81a8b92..f034e7b 100644 --- a/dlls/comctl32/header.c +++ b/dlls/comctl32/header.c @@ -875,8 +875,37 @@ HEADER_SendClickNotify (HWND hwnd, UINT 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; }