Changeset 3217 for trunk/src/shell32/dataobject.cpp
- Timestamp:
- Mar 24, 2000, 6:17:30 PM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/shell32/dataobject.cpp
r1214 r3217 1 /* $Id: dataobject.cpp,v 1. 1 1999-10-09 11:13:18 sandervlExp $ */1 /* $Id: dataobject.cpp,v 1.2 2000-03-24 17:17:26 cbratschi Exp $ */ 2 2 3 3 /* … … 10 10 11 11 /* 12 * 12 * IEnumFORMATETC, IDataObject 13 13 * 14 14 * selecting and droping objects within the shell and/or common dialogs 15 15 * 16 * Copyright 1998, 1999<juergen.schmied@metronet.de>16 * Copyright 1998, 1999 <juergen.schmied@metronet.de> 17 17 */ 18 18 … … 85 85 LPENUMFORMATETC IEnumFORMATETC_Constructor(UINT cfmt, const FORMATETC afmt[]) 86 86 { 87 88 87 IEnumFORMATETCImpl* ef; 88 DWORD size=cfmt * sizeof(FORMATETC); 89 89 90 90 dprintf(("SHELL32:dataobject:IEnumFORMATETC_Constructor(%08xh,%08xh)\n", … … 92 92 afmt)); 93 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 94 ef=(IEnumFORMATETCImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IEnumFORMATETCImpl)); 95 96 if(ef) 97 { 98 ef->ref=1; 99 ef->lpvtbl=&efvt; 100 101 ef->countFmt = cfmt; 102 ef->pFmt = (FORMATETC*)SHAlloc (size); 103 104 if (ef->pFmt) 105 { 106 memcpy(ef->pFmt, afmt, size); 107 } 108 109 shell32_ObjCount++; 110 } 111 112 TRACE("(%p)->()\n",ef); 113 return (LPENUMFORMATETC)ef; 114 114 } 115 115 … … 117 117 static HRESULT WINAPI IEnumFORMATETC_fnQueryInterface(LPENUMFORMATETC iface, REFIID riid, LPVOID* ppvObj) 118 118 { 119 120 121 119 ICOM_THIS(IEnumFORMATETCImpl,iface); 120 char xriid[50]; 121 WINE_StringFromCLSID((LPCLSID)riid,xriid); 122 122 123 123 dprintf(("SHELL32:dataobject:IEnumFORMATETC_fnQueryInterface(%08xh,%08xh,%08xh)\n", … … 126 126 xriid)); 127 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 128 *ppvObj = NULL; 129 130 if(IsEqualIID(riid, &IID_IUnknown)) 131 { *ppvObj = This; 132 } 133 else if(IsEqualIID(riid, &IID_IEnumFORMATETC)) 134 { *ppvObj = (IDataObject*)This; 135 } 136 137 if(*ppvObj) 138 { IEnumFORMATETC_AddRef((IEnumFORMATETC*)*ppvObj); 139 TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj); 140 return S_OK; 141 } 142 TRACE("-- Interface: E_NOINTERFACE\n"); 143 return E_NOINTERFACE; 144 144 145 145 } … … 148 148 static ULONG WINAPI IEnumFORMATETC_fnAddRef(LPENUMFORMATETC iface) 149 149 { 150 150 ICOM_THIS(IEnumFORMATETCImpl,iface); 151 151 152 152 dprintf(("SHELL32:dataobject:IEnumFORMATETC_fnAddRef(%08xh,%08xh)\n", … … 154 154 This->ref)); 155 155 156 157 156 shell32_ObjCount++; 157 return ++(This->ref); 158 158 } 159 159 … … 161 161 static ULONG WINAPI IEnumFORMATETC_fnRelease(LPENUMFORMATETC iface) 162 162 { 163 163 ICOM_THIS(IEnumFORMATETCImpl,iface); 164 164 165 165 dprintf(("SHELL32:dataobject:IEnumFORMATETC_fnRelease(%08xh)\n", 166 166 This)); 167 167 168 169 170 171 172 173 174 175 176 177 178 168 shell32_ObjCount--; 169 170 if (!--(This->ref)) 171 { TRACE(" destroying IEnumFORMATETC(%p)\n",This); 172 if (This->pFmt) 173 { SHFree (This->pFmt); 174 } 175 HeapFree(GetProcessHeap(),0,This); 176 return 0; 177 } 178 return This->ref; 179 179 } 180 180 … … 182 182 static HRESULT WINAPI IEnumFORMATETC_fnNext(LPENUMFORMATETC iface, ULONG celt, FORMATETC *rgelt, ULONG *pceltFethed) 183 183 { 184 185 186 184 ICOM_THIS(IEnumFORMATETCImpl,iface); 185 UINT cfetch; 186 HRESULT hres = S_FALSE; 187 187 188 188 dprintf(("SHELL32:dataobject:IEnumFORMATETC_fnNext(%08xh,%08xh,%08xh,%08xh)\n", … … 192 192 pceltFethed)); 193 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 194 if (This->posFmt < This->countFmt) 195 { 196 cfetch = This->countFmt - This->posFmt; 197 if (cfetch >= celt) 198 { 199 cfetch = celt; 200 hres = S_OK; 201 } 202 memcpy(rgelt, &This->pFmt[This->posFmt], cfetch * sizeof(FORMATETC)); 203 This->posFmt += cfetch; 204 } 205 else 206 { 207 cfetch = 0; 208 } 209 210 if (pceltFethed) 211 { 212 *pceltFethed = cfetch; 213 } 214 214 215 215 return hres; … … 219 219 static HRESULT WINAPI IEnumFORMATETC_fnSkip(LPENUMFORMATETC iface, ULONG celt) 220 220 { 221 221 ICOM_THIS(IEnumFORMATETCImpl,iface); 222 222 223 223 dprintf(("SHELL32:dataobject:IEnumFORMATETC_fnSkip(%08xh,%08xh) to be fixed\n", … … 225 225 celt)); 226 226 227 228 229 230 231 232 233 227 This->posFmt += celt; 228 if (This->posFmt > This->countFmt) 229 { 230 This->posFmt = This->countFmt; 231 return S_FALSE; 232 } 233 return S_OK; 234 234 } 235 235 static HRESULT WINAPI IEnumFORMATETC_fnReset(LPENUMFORMATETC iface) 236 236 { 237 237 ICOM_THIS(IEnumFORMATETCImpl,iface); 238 238 239 239 dprintf(("SHELL32:dataobject:IEnumFORMATETC_fnReset(%08xh) to be fixed\n", … … 247 247 static HRESULT WINAPI IEnumFORMATETC_fnClone(LPENUMFORMATETC iface, LPENUMFORMATETC* ppenum) 248 248 { 249 249 ICOM_THIS(IEnumFORMATETCImpl,iface); 250 250 251 251 dprintf(("SHELL32:dataobject:IEnumFORMATETC_fnClone(%08xh) not implemented\n", … … 253 253 ppenum)); 254 254 255 255 return E_NOTIMPL; 256 256 } 257 257 … … 310 310 311 311 static IDLList_VTable idllvt = 312 { 313 314 315 316 317 318 312 { IDLList_GetState, 313 IDLList_GetElement, 314 IDLList_GetCount, 315 IDLList_StoreItem, 316 IDLList_AddItems, 317 IDLList_InitList, 318 IDLList_CleanList 319 319 }; 320 320 321 321 LPIDLLIST IDLList_Constructor (UINT uStep) 322 322 { 323 324 323 LPIDLLIST lpidll; 324 lpidll = (LPIDLLIST)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDLList)); 325 325 326 326 dprintf(("SHELL32:dataobject:IDLList_Constructor(%08xh, %08xh) not implemented\n", … … 328 328 uStep)); 329 329 330 331 332 333 334 335 336 330 if (lpidll) 331 { 332 lpidll->lpvtbl=&idllvt; 333 lpidll->uStep=uStep; 334 } 335 336 return lpidll; 337 337 } 338 338 … … 343 343 THIS)); 344 344 345 345 IDLList_CleanList(THIS); 346 346 } 347 347 … … 353 353 THIS->dpa)); 354 354 355 356 357 358 359 360 361 362 355 if (THIS->uStep == 0) 356 { 357 if (THIS->dpa) 358 return(State_Init); 359 360 return(State_OutOfMem); 361 } 362 return(State_UnInit); 363 363 } 364 364 … … 370 370 nIndex)); 371 371 372 372 return((LPITEMIDLIST)pDPA_GetPtr(THIS->dpa, nIndex)); 373 373 } 374 374 … … 379 379 THIS)); 380 380 381 381 return(IDLList_GetState(THIS)==State_Init ? DPA_GetPtrCount(THIS->dpa) : 0); 382 382 } 383 383 … … 389 389 pidl)); 390 390 391 391 if (pidl) 392 392 { if (IDLList_InitList(THIS) && pDPA_InsertPtr(THIS->dpa, 0x7fff, (LPSTR)pidl)>=0) 393 394 393 return(TRUE); 394 ILFree(pidl); 395 395 } 396 396 IDLList_CleanList(THIS); … … 401 401 static BOOL WINAPI IDLList_AddItems(LPIDLLIST THIS, LPITEMIDLIST *apidl, UINT cidl) 402 402 { 403 403 INT i; 404 404 405 405 dprintf(("SHELL32:dataobject:IDLList_AddItems((%p)->(apidl=%p cidl=%u)\n", … … 408 408 cidl)); 409 409 410 410 for (i=0; i<cidl; ++i) 411 411 { if (!IDLList_StoreItem(THIS, ILClone((LPCITEMIDLIST)apidl[i]))) 412 412 return(FALSE); 413 413 } 414 414 return(TRUE); … … 421 421 THIS)); 422 422 423 423 switch (IDLList_GetState(THIS)) 424 424 { case State_Init: 425 426 427 428 429 430 431 432 433 434 425 return(TRUE); 426 427 case State_OutOfMem: 428 return(FALSE); 429 430 case State_UnInit: 431 default: 432 THIS->dpa = pDPA_Create(THIS->uStep); 433 THIS->uStep = 0; 434 return(IDLList_InitList(THIS)); 435 435 } 436 436 } … … 439 439 static void WINAPI IDLList_CleanList(LPIDLLIST THIS) 440 440 { 441 441 INT i; 442 442 443 443 dprintf(("SHELL32:dataobject:IDLList_CleanList(%p)\n", 444 444 THIS)); 445 445 446 446 if (THIS->uStep != 0) 447 447 { THIS->dpa = NULL; 448 449 448 THIS->uStep = 0; 449 return; 450 450 } 451 451 … … 471 471 typedef struct 472 472 { 473 474 475 DWORDref;476 477 478 LPIDLLISTlpill; /* the data of the dataobject */479 LPITEMIDLISTpidl;480 481 FORMATETCpFormatEtc[MAX_FORMATS];482 UINTcfShellIDList;483 UINTcfFileGroupDesc;484 UINTcfFileContents;473 /* IUnknown fields */ 474 ICOM_VTABLE(IDataObject)* lpvtbl; 475 DWORD ref; 476 477 /* IDataObject fields */ 478 LPIDLLIST lpill; /* the data of the dataobject */ 479 LPITEMIDLIST pidl; 480 481 FORMATETC pFormatEtc[MAX_FORMATS]; 482 UINT cfShellIDList; 483 UINT cfFileGroupDesc; 484 UINT cfFileContents; 485 485 486 486 } IDataObjectImpl; … … 493 493 static HRESULT WINAPI IDataObject_fnQueryInterface(LPDATAOBJECT iface, REFIID riid, LPVOID * ppvObj) 494 494 { 495 496 497 495 ICOM_THIS(IDataObjectImpl,iface); 496 char xriid[50]; 497 WINE_StringFromCLSID((LPCLSID)riid,xriid); 498 498 499 499 dprintf(("SHELL32:dataobject:IDataObject_fnQueryInterface((%p)->(\n\tIID:\t%s,%p)\n", … … 502 502 ppvObj)); 503 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 504 *ppvObj = NULL; 505 506 if(IsEqualIID(riid, &IID_IUnknown)) /*IUnknown*/ 507 { *ppvObj = This; 508 } 509 else if(IsEqualIID(riid, &IID_IDataObject)) /*IDataObject*/ 510 { *ppvObj = (IDataObject*)This; 511 } 512 513 if(*ppvObj) 514 { IDataObject_AddRef((IDataObject*)*ppvObj); 515 TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj); 516 return S_OK; 517 } 518 TRACE("-- Interface: E_NOINTERFACE\n"); 519 return E_NOINTERFACE; 520 520 } 521 521 /************************************************************************** … … 524 524 static ULONG WINAPI IDataObject_fnAddRef(LPDATAOBJECT iface) 525 525 { 526 526 ICOM_THIS(IDataObjectImpl,iface); 527 527 528 528 dprintf(("SHELL32:dataobject:IDataObject_fnAddRef((%p)->(count=%lu)\n", … … 530 530 This->ref)); 531 531 532 533 532 shell32_ObjCount++; 533 return ++(This->ref); 534 534 } 535 535 /************************************************************************** … … 538 538 static ULONG WINAPI IDataObject_fnRelease(LPDATAOBJECT iface) 539 539 { 540 540 ICOM_THIS(IDataObjectImpl,iface); 541 541 dprintf(("SHELL32:dataobject:IDataObject_fnRelease(%p)\n", 542 542 This)); 543 544 545 546 547 548 549 550 551 543 shell32_ObjCount--; 544 545 if (!--(This->ref)) 546 { TRACE(" destroying IDataObject(%p)\n",This); 547 IDLList_Destructor(This->lpill); 548 HeapFree(GetProcessHeap(),0,This); 549 return 0; 550 } 551 return This->ref; 552 552 } 553 553 … … 557 557 static HRESULT WINAPI IDataObject_fnGetData(LPDATAOBJECT iface, LPFORMATETC pformatetcIn, STGMEDIUM *pmedium) 558 558 { 559 560 561 charszTemp[256];562 UINTcItems;563 DWORDsizeCIDA, sizePidl, nOffset, nSize;564 LPCIDApcida;565 HGLOBALhmem;566 inti;567 LPITEMIDLISTpidl;568 569 559 ICOM_THIS(IDataObjectImpl,iface); 560 561 char szTemp[256]; 562 UINT cItems; 563 DWORD sizeCIDA, sizePidl, nOffset, nSize; 564 LPCIDA pcida; 565 HGLOBAL hmem; 566 int i; 567 LPITEMIDLIST pidl; 568 569 GetClipboardFormatNameA (pformatetcIn->cfFormat, szTemp, 256); 570 570 571 571 dprintf(("SHELL32:dataobject:IDataObject_fnGetData(%p)->(%p %p format=%s)\n", … … 575 575 szTemp)); 576 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 sizeCIDA = sizeof(CIDA) + sizeof (UINT)*(cItems);/* without any pidl */593 sizePidl = ILGetSize (This->pidl);/* add root pidl */594 595 596 hmem = GlobalAlloc(GHND|GMEM_SHARE, nSize); 597 598 599 600 nOffset = sizeCIDA;/* start after the CIDA */601 602 603 pcida->aoffset[0] = nOffset;/* first element */604 605 606 607 608 609 610 611 612 nSize += sizePidl;/* size of the structure */613 614 615 GlobalUnlock(hmem);/* grow memory */616 617 618 619 620 pcida->aoffset[i+1] = nOffset;/* copy element */621 622 623 624 625 626 627 628 629 630 631 632 return hmem;633 634 635 636 577 /* test expected format */ 578 if (!(pformatetcIn->cfFormat == This->cfShellIDList)) 579 { 580 FIXME("-- clipformat not implemented\n"); 581 return (E_INVALIDARG); 582 } 583 584 if (pformatetcIn->ptd==NULL 585 && (pformatetcIn->dwAspect & DVASPECT_CONTENT) 586 && pformatetcIn->lindex==-1 587 && (pformatetcIn->tymed&TYMED_HGLOBAL)) 588 { 589 cItems = This->lpill->lpvtbl->fnGetCount(This->lpill); 590 if (cItems < 1) return(E_UNEXPECTED); 591 592 sizeCIDA = sizeof(CIDA) + sizeof (UINT)*(cItems); /* without any pidl */ 593 sizePidl = ILGetSize (This->pidl); /* add root pidl */ 594 595 nSize = sizeCIDA + sizePidl; 596 hmem = GlobalAlloc(GHND|GMEM_SHARE, nSize); 597 if (!hmem) return(E_OUTOFMEMORY); 598 pcida = (CIDA*)GlobalLock (hmem); 599 600 nOffset = sizeCIDA; /* start after the CIDA */ 601 pcida->cidl = cItems; 602 603 pcida->aoffset[0] = nOffset; /* first element */ 604 memcpy(((LPBYTE)pcida)+nOffset, This->pidl, sizePidl); 605 nOffset += sizePidl; 606 pdump(This->pidl); 607 608 for (i=0; i< cItems; i++) 609 { 610 pidl = This->lpill->lpvtbl->fnGetElement(This->lpill, i); 611 sizePidl = ILGetSize (pidl); 612 nSize += sizePidl; /* size of the structure */ 613 pdump(pidl); 614 615 GlobalUnlock(hmem); /* grow memory */ 616 hmem = GlobalReAlloc(hmem, nSize, GHND|GMEM_SHARE); 617 if (!hmem) return(E_OUTOFMEMORY); 618 pcida = (CIDA*)GlobalLock (hmem); 619 620 pcida->aoffset[i+1] = nOffset; /* copy element */ 621 memcpy(((LPBYTE)pcida)+nOffset, pidl, sizePidl); 622 nOffset += sizePidl; 623 } 624 625 GlobalUnlock(hmem); 626 627 pmedium->tymed = TYMED_HGLOBAL; 628 pmedium->u.hGlobal = hmem; 629 pmedium->pUnkForRelease = NULL; 630 631 TRACE("(%p)->(cida at %p)\n", This, pcida); 632 return S_OK; 633 } 634 635 FIXME("-- can't serve format\n"); 636 return (E_INVALIDARG); 637 637 } 638 638 … … 640 640 static HRESULT WINAPI IDataObject_fnGetDataHere(LPDATAOBJECT iface, LPFORMATETC pformatetc, STGMEDIUM *pmedium) 641 641 { 642 642 ICOM_THIS(IDataObjectImpl,iface); 643 643 dprintf(("SHELL32:dataobject:IDataObject_fnGetDataHere(%p)->(%p %p) not implemented\n", 644 644 This, … … 646 646 pmedium)); 647 647 648 648 return E_NOTIMPL; 649 649 } 650 650 … … 652 652 static HRESULT WINAPI IDataObject_fnQueryGetData(LPDATAOBJECT iface, LPFORMATETC pformatetc) 653 653 { 654 655 656 654 ICOM_THIS(IDataObjectImpl,iface); 655 UINT i; 656 657 657 dprintf(("SHELL32:dataobject:IDataObject_fnQueryGetData((%p)->(fmt=0x%08x tym=0x%08lx)\n", 658 658 This, … … 660 660 pformatetc->tymed)); 661 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 662 if(!(DVASPECT_CONTENT & pformatetc->dwAspect)) 663 return DV_E_DVASPECT; 664 665 /* check our formats table what we have */ 666 for (i=0; i<MAX_FORMATS; i++) 667 { 668 if ((This->pFormatEtc[i].cfFormat == pformatetc->cfFormat) 669 && (This->pFormatEtc[i].tymed == pformatetc->tymed)) 670 { 671 return S_OK; 672 } 673 } 674 675 return DV_E_TYMED; 676 676 } 677 677 … … 679 679 static HRESULT WINAPI IDataObject_fnGetCanonicalFormatEtc(LPDATAOBJECT iface, LPFORMATETC pformatetcIn, LPFORMATETC pformatetcOut) 680 680 { 681 681 ICOM_THIS(IDataObjectImpl,iface); 682 682 683 683 dprintf(("SHELL32:dataobject:IDataObject_fnGetCanonicalFormatEtc((%p)->(%p %p) not implemented\n", … … 686 686 pformatetcOut)); 687 687 688 688 return E_NOTIMPL; 689 689 } 690 690 … … 692 692 static HRESULT WINAPI IDataObject_fnSetData(LPDATAOBJECT iface, LPFORMATETC pformatetc, STGMEDIUM *pmedium, BOOL fRelease) 693 693 { 694 694 ICOM_THIS(IDataObjectImpl,iface); 695 695 dprintf(("SHELL32:dataobject:IDataObject_fnSetData((%p)->(%p %p %08xh) not implemented\n", 696 696 This, … … 698 698 pmedium, 699 699 fRelease)); 700 700 return E_NOTIMPL; 701 701 } 702 702 … … 704 704 static HRESULT WINAPI IDataObject_fnEnumFormatEtc(LPDATAOBJECT iface, DWORD dwDirection, IEnumFORMATETC **ppenumFormatEtc) 705 705 { 706 706 ICOM_THIS(IDataObjectImpl,iface); 707 707 708 708 dprintf(("SHELL32:dataobject:IDataObject_fnEnumFormatEtc((%p)->(%08xh %p)\n", … … 711 711 ppenumFormatEtc)); 712 712 713 714 715 716 717 718 719 720 721 722 713 *ppenumFormatEtc=NULL; 714 715 /* only get data */ 716 if (DATADIR_GET == dwDirection) 717 { 718 *ppenumFormatEtc = IEnumFORMATETC_Constructor(MAX_FORMATS, This->pFormatEtc); 719 return (*ppenumFormatEtc) ? S_OK : E_FAIL; 720 } 721 722 return E_NOTIMPL; 723 723 } 724 724 static HRESULT WINAPI IDataObject_fnDAdvise(LPDATAOBJECT iface, FORMATETC *pformatetc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection) 725 725 { 726 726 ICOM_THIS(IDataObjectImpl,iface); 727 727 dprintf(("SHELL32:dataobject:IDataObject_fnDAdvise((%p)->(%p %08xh %p %p) not implemented.\n", 728 728 This, … … 732 732 pdwConnection)); 733 733 734 734 return E_NOTIMPL; 735 735 } 736 736 … … 738 738 static HRESULT WINAPI IDataObject_fnDUnadvise(LPDATAOBJECT iface, DWORD dwConnection) 739 739 { 740 740 ICOM_THIS(IDataObjectImpl,iface); 741 741 dprintf(("SHELL32:dataobject:IDataObject_fnDUnadvise((%p)->(%08xh) not implemented.\n", 742 742 This, 743 743 dwConnection)); 744 744 return E_NOTIMPL; 745 745 } 746 746 static HRESULT WINAPI IDataObject_fnEnumDAdvise(LPDATAOBJECT iface, IEnumSTATDATA **ppenumAdvise) 747 747 { 748 748 ICOM_THIS(IDataObjectImpl,iface); 749 749 dprintf(("SHELL32:dataobject:IDataObject_fnEnumDAdvise((%p)->(%p) not implemented.\n", 750 750 This, 751 751 ppenumAdvise)); 752 752 753 753 return E_NOTIMPL; 754 754 } 755 755 756 756 static struct ICOM_VTABLE(IDataObject) dtovt = 757 757 { 758 759 760 761 762 763 764 765 766 767 768 769 770 758 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE 759 IDataObject_fnQueryInterface, 760 IDataObject_fnAddRef, 761 IDataObject_fnRelease, 762 IDataObject_fnGetData, 763 IDataObject_fnGetDataHere, 764 IDataObject_fnQueryGetData, 765 IDataObject_fnGetCanonicalFormatEtc, 766 IDataObject_fnSetData, 767 IDataObject_fnEnumFormatEtc, 768 IDataObject_fnDAdvise, 769 IDataObject_fnDUnadvise, 770 IDataObject_fnEnumDAdvise 771 771 }; 772 772 … … 776 776 LPDATAOBJECT IDataObject_Constructor(HWND hwndOwner, LPITEMIDLIST pMyPidl, LPITEMIDLIST * apidl, UINT cidl) 777 777 { 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 /* 798 778 IDataObjectImpl* dto; 779 780 dto = (IDataObjectImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDataObjectImpl)); 781 782 if (dto) 783 { 784 dto->ref=1; 785 dto->lpvtbl=&dtovt; 786 dto->pidl=ILClone(pMyPidl); 787 788 /* fill the ItemID List List */ 789 dto->lpill = IDLList_Constructor (8); 790 if (! dto->lpill ) 791 return NULL; 792 793 dto->lpill->lpvtbl->fnAddItems(dto->lpill, apidl, cidl); 794 795 /* */ 796 dto->cfShellIDList = RegisterClipboardFormatA(CFSTR_SHELLIDLIST); 797 /* dto->cfFileGroupDesc = RegisterClipboardFormatA(CFSTR_FILEDESCRIPTORA); 798 dto->cfFileContents = RegisterClipboardFormatA(CFSTR_FILECONTENTS); 799 799 */ 800 801 802 803 804 800 InitFormatEtc(dto->pFormatEtc[0], dto->cfShellIDList, TYMED_HGLOBAL); 801 802 shell32_ObjCount++; 803 } 804 805 805 dprintf(("SHELL32:dataobject:IDataObject_Constructor((%p)->(apidl=%p cidl=%u)\n", 806 806 dto, 807 807 apidl, 808 808 cidl)); 809 810 } 811 809 return (LPDATAOBJECT)dto; 810 } 811
Note:
See TracChangeset
for help on using the changeset viewer.