Reactos

[CLIPBRD] Support CF_HDROP format (#5622)

This allows to see what files are being copied into clipboard.
CORE-19140

authored by

Katayama Hirofumi MZ and committed by
GitHub
f90a1956 657f7287

+49 -1
+7
base/applications/clipbrd/clipbrd.c
··· 358 358 break; 359 359 } 360 360 361 + case CF_HDROP: 362 + { 363 + GetClientRect(hWnd, &rc); 364 + HDropFromClipboard(hdc, &rc); 365 + break; 366 + } 367 + 361 368 default: 362 369 { 363 370 GetClientRect(hWnd, &rc);
+2 -1
base/applications/clipbrd/cliputils.c
··· 164 164 CF_DSPBITMAP, 165 165 CF_DSPMETAFILEPICT, 166 166 CF_DSPENHMETAFILE, 167 - CF_PALETTE 167 + CF_PALETTE, 168 + CF_HDROP 168 169 }; 169 170 170 171 return GetPriorityClipboardFormat(uFormatList, ARRAYSIZE(uFormatList));
+39
base/applications/clipbrd/winutils.c
··· 331 331 PlayEnhMetaFile(hdc, hEmf, lpRect); 332 332 } 333 333 334 + static LPWSTR AllocStrCat(LPWSTR psz, LPCWSTR cat) 335 + { 336 + INT cch; 337 + LPWSTR pszNew; 338 + 339 + if (psz == NULL) 340 + return _wcsdup(cat); 341 + 342 + cch = lstrlenW(psz) + lstrlenW(cat) + 1; 343 + pszNew = realloc(psz, cch * sizeof(WCHAR)); 344 + if (!pszNew) 345 + return psz; 346 + 347 + lstrcatW(pszNew, cat); 348 + return pszNew; 349 + } 350 + 351 + void HDropFromClipboard(HDC hdc, const RECT *lpRect) 352 + { 353 + LPWSTR pszAlloc = NULL; 354 + WCHAR szFile[MAX_PATH + 2]; 355 + HDROP hDrop = (HDROP)GetClipboardData(CF_HDROP); 356 + UINT iFile, cFiles = DragQueryFileW(hDrop, 0xFFFFFFFF, NULL, 0); 357 + RECT rc = *lpRect; 358 + 359 + FillRect(hdc, &rc, (HBRUSH)(COLOR_WINDOW + 1)); 360 + 361 + for (iFile = 0; iFile < cFiles; ++iFile) 362 + { 363 + DragQueryFileW(hDrop, iFile, szFile, _countof(szFile)); 364 + lstrcatW(szFile, L"\r\n"); 365 + pszAlloc = AllocStrCat(pszAlloc, szFile); 366 + } 367 + 368 + DrawTextW(hdc, pszAlloc, -1, &rc, 369 + DT_LEFT | DT_NOPREFIX | DT_EXTERNALLEADING | DT_WORD_ELLIPSIS); 370 + free(pszAlloc); 371 + } 372 + 334 373 BOOL RealizeClipboardPalette(HDC hdc) 335 374 { 336 375 BOOL Success;
+1
base/applications/clipbrd/winutils.h
··· 17 17 void SetDIBitsToDeviceFromClipboard(UINT uFormat, PAINTSTRUCT ps, SCROLLSTATE state, UINT fuColorUse); 18 18 void PlayMetaFileFromClipboard(HDC hdc, const RECT *lpRect); 19 19 void PlayEnhMetaFileFromClipboard(HDC hdc, const RECT *lpRect); 20 + void HDropFromClipboard(HDC hdc, const RECT *lpRect); 20 21 BOOL RealizeClipboardPalette(HDC hdc);