Changeset 6650 for trunk/src/shell32/shlview.c
- Timestamp:
- Sep 5, 2001, 3:54:53 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/shell32/shlview.c
r5618 r6650 1 /* $Id: shlview.c,v 1.3 2001-09-05 13:46:59 bird Exp $ */ 1 2 /* 2 * 3 * ShellView 3 4 * 4 * Copyright 1998,1999<juergen.schmied@debitel.net>5 * Copyright 1998,1999 <juergen.schmied@debitel.net> 5 6 * 6 7 * This is the view visualizing the data provied by the shellfolder. 7 * No direct access to data from pidls should be done from here. 8 * 8 * No direct access to data from pidls should be done from here. 9 * 9 10 * FIXME: The order by part of the background context menu should be 10 11 * buily according to the columns shown. … … 20 21 * 21 22 * FIXME: when the ShellView_WndProc gets a WM_NCDESTROY should we do a 22 * Release() ??? 23 * Release() ??? 23 24 */ 24 25 … … 49 50 }LISTVIEW_SORT_INFO, *LPLISTVIEW_SORT_INFO; 50 51 51 typedef struct 52 { 53 DWORDref;54 ICOM_VTABLE(IOleCommandTarget)*lpvtblOleCommandTarget;55 ICOM_VTABLE(IDropTarget)*lpvtblDropTarget;56 ICOM_VTABLE(IDropSource)*lpvtblDropSource;57 ICOM_VTABLE(IViewObject)*lpvtblViewObject;58 IShellFolder*pSFParent;59 IShellFolder2*pSF2Parent;60 IShellBrowser*pShellBrowser;61 ICommDlgBrowser*pCommDlgBrowser;62 HWND hWnd;/* SHELLDLL_DefView */63 HWND hWndList;/* ListView control */64 HWNDhWndParent;65 FOLDERSETTINGSFolderSettings;66 HMENUhMenu;67 UINTuState;68 UINTcidl;69 LPITEMIDLIST*apidl;52 typedef struct 53 { ICOM_VFIELD(IShellView); 54 DWORD ref; 55 ICOM_VTABLE(IOleCommandTarget)* lpvtblOleCommandTarget; 56 ICOM_VTABLE(IDropTarget)* lpvtblDropTarget; 57 ICOM_VTABLE(IDropSource)* lpvtblDropSource; 58 ICOM_VTABLE(IViewObject)* lpvtblViewObject; 59 IShellFolder* pSFParent; 60 IShellFolder2* pSF2Parent; 61 IShellBrowser* pShellBrowser; 62 ICommDlgBrowser* pCommDlgBrowser; 63 HWND hWnd; /* SHELLDLL_DefView */ 64 HWND hWndList; /* ListView control */ 65 HWND hWndParent; 66 FOLDERSETTINGS FolderSettings; 67 HMENU hMenu; 68 UINT uState; 69 UINT cidl; 70 LPITEMIDLIST *apidl; 70 71 LISTVIEW_SORT_INFO ListViewSortInfo; 71 HANDLE hNotify;/* change notification handle */72 HANDLEhAccel;72 HANDLE hNotify; /* change notification handle */ 73 HANDLE hAccel; 73 74 } IShellViewImpl; 74 75 … … 76 77 77 78 static struct ICOM_VTABLE(IOleCommandTarget) ctvt; 78 #define _IOleCommandTarget_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblOleCommandTarget))) 79 #define _ICOM_THIS_From_IOleCommandTarget(class, name) class* This = (class*)(((char*)name)-_IOleCommandTarget_Offset); 79 #define _IOleCommandTarget_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblOleCommandTarget))) 80 #define _ICOM_THIS_From_IOleCommandTarget(class, name) class* This = (class*)(((char*)name)-_IOleCommandTarget_Offset); 80 81 81 82 static struct ICOM_VTABLE(IDropTarget) dtvt; 82 #define _IDropTarget_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblDropTarget))) 83 #define _ICOM_THIS_From_IDropTarget(class, name) class* This = (class*)(((char*)name)-_IDropTarget_Offset); 83 #define _IDropTarget_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblDropTarget))) 84 #define _ICOM_THIS_From_IDropTarget(class, name) class* This = (class*)(((char*)name)-_IDropTarget_Offset); 84 85 85 86 static struct ICOM_VTABLE(IDropSource) dsvt; 86 #define _IDropSource_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblDropSource))) 87 #define _ICOM_THIS_From_IDropSource(class, name) class* This = (class*)(((char*)name)-_IDropSource_Offset); 87 #define _IDropSource_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblDropSource))) 88 #define _ICOM_THIS_From_IDropSource(class, name) class* This = (class*)(((char*)name)-_IDropSource_Offset); 88 89 89 90 static struct ICOM_VTABLE(IViewObject) vovt; 90 #define _IViewObject_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblViewObject))) 91 #define _ICOM_THIS_From_IViewObject(class, name) class* This = (class*)(((char*)name)-_IViewObject_Offset); 91 #define _IViewObject_Offset ((int)(&(((IShellViewImpl*)0)->lpvtblViewObject))) 92 #define _ICOM_THIS_From_IViewObject(class, name) class* This = (class*)(((char*)name)-_IViewObject_Offset); 92 93 93 94 /* ListView Header ID's */ … … 112 113 #define GET_WM_COMMAND_CMD(wp, lp) HIWORD(wp) 113 114 114 extern void WINAPI _InsertMenuItem (HMENU hmenu, UINT indexMenu, BOOL fByPosition, 115 115 extern void WINAPI _InsertMenuItem (HMENU hmenu, UINT indexMenu, BOOL fByPosition, 116 UINT wID, UINT fType, LPSTR dwTypeData, UINT fState); 116 117 117 118 /* … … 127 128 } MYTOOLINFO, *LPMYTOOLINFO; 128 129 129 MYTOOLINFO Tools[] = 130 MYTOOLINFO Tools[] = 130 131 { 131 132 { FCIDM_SHVIEW_BIGICON, 0, 0, IDS_VIEW_LARGE, TBSTATE_ENABLED, TBSTYLE_BUTTON }, … … 143 144 144 145 /********************************************************** 145 * 146 * IShellView_Constructor 146 147 */ 147 148 IShellView * IShellView_Constructor( IShellFolder * pFolder) 148 { 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 149 { IShellViewImpl * sv; 150 sv=(IShellViewImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IShellViewImpl)); 151 sv->ref=1; 152 ICOM_VTBL(sv)=&svvt; 153 sv->lpvtblOleCommandTarget=&ctvt; 154 sv->lpvtblDropTarget=&dtvt; 155 sv->lpvtblDropSource=&dsvt; 156 sv->lpvtblViewObject=&vovt; 157 158 sv->pSFParent = pFolder; 159 if(pFolder) IShellFolder_AddRef(pFolder); 160 IShellFolder_QueryInterface(sv->pSFParent, &IID_IShellFolder2, (LPVOID*)&sv->pSF2Parent); 161 162 TRACE("(%p)->(%p)\n",sv, pFolder); 163 shell32_ObjCount++; 164 return (IShellView *) sv; 164 165 } 165 166 … … 169 170 */ 170 171 static BOOL IsInCommDlg(IShellViewImpl * This) 171 { 172 { return(This->pCommDlgBrowser != NULL); 172 173 } 173 174 174 175 static HRESULT IncludeObject(IShellViewImpl * This, LPCITEMIDLIST pidl) 175 176 { 176 177 178 179 180 181 182 183 184 177 HRESULT ret = S_OK; 178 179 if ( IsInCommDlg(This) ) 180 { 181 TRACE("ICommDlgBrowser::IncludeObject pidl=%p\n", pidl); 182 ret = ICommDlgBrowser_IncludeObject(This->pCommDlgBrowser, (IShellView*)This, pidl); 183 TRACE("--0x%08lx\n", ret); 184 } 185 return ret; 185 186 } 186 187 187 188 static HRESULT OnDefaultCommand(IShellViewImpl * This) 188 189 { 189 190 191 192 193 194 195 196 197 190 HRESULT ret = S_FALSE; 191 192 if (IsInCommDlg(This)) 193 { 194 TRACE("ICommDlgBrowser::OnDefaultCommand\n"); 195 ret = ICommDlgBrowser_OnDefaultCommand(This->pCommDlgBrowser, (IShellView*)This); 196 TRACE("--\n"); 197 } 198 return ret; 198 199 } 199 200 200 201 static HRESULT OnStateChange(IShellViewImpl * This, UINT uFlags) 201 202 { 202 203 204 205 206 207 208 209 210 211 } 212 /********************************************************** 213 * 203 HRESULT ret = S_FALSE; 204 205 if (IsInCommDlg(This)) 206 { 207 TRACE("ICommDlgBrowser::OnStateChange flags=%x\n", uFlags); 208 ret = ICommDlgBrowser_OnStateChange(This->pCommDlgBrowser, (IShellView*)This, uFlags); 209 TRACE("--\n"); 210 } 211 return ret; 212 } 213 /********************************************************** 214 * set the toolbar of the filedialog buttons 214 215 * 215 * - activates the buttons from the shellbrowser according to 216 * - activates the buttons from the shellbrowser according to 216 217 * the view state 217 218 */ 218 219 static void CheckToolbar(IShellViewImpl * This) 219 220 { 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 221 LRESULT result; 222 223 TRACE("\n"); 224 225 if (IsInCommDlg(This)) 226 { 227 IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_CHECKBUTTON, 228 FCIDM_TB_SMALLICON, (This->FolderSettings.ViewMode==FVM_LIST)? TRUE : FALSE, &result); 229 IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_CHECKBUTTON, 230 FCIDM_TB_REPORTVIEW, (This->FolderSettings.ViewMode==FVM_DETAILS)? TRUE : FALSE, &result); 231 IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_ENABLEBUTTON, 232 FCIDM_TB_SMALLICON, TRUE, &result); 233 IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_TOOLBAR, TB_ENABLEBUTTON, 234 FCIDM_TB_REPORTVIEW, TRUE, &result); 235 } 235 236 } 236 237 … … 240 241 */ 241 242 /********************************************************** 242 * 243 * change the style of the listview control 243 244 */ 244 245 static void SetStyle(IShellViewImpl * This, DWORD dwAdd, DWORD dwRemove) 245 246 { 246 247 248 249 250 251 247 DWORD tmpstyle; 248 249 TRACE("(%p)\n", This); 250 251 tmpstyle = GetWindowLongA(This->hWndList, GWL_STYLE); 252 SetWindowLongA(This->hWndList, GWL_STYLE, dwAdd | (tmpstyle & ~dwRemove)); 252 253 } 253 254 … … 258 259 */ 259 260 static BOOL ShellView_CreateList (IShellViewImpl * This) 260 { 261 262 263 264 265 266 267 268 269 case FVM_ICON: dwStyle |= LVS_ICON;break;270 case FVM_DETAILS: dwStyle |= LVS_REPORT;break;271 case FVM_SMALLICON: dwStyle |= LVS_SMALLICON;break;272 case FVM_LIST: dwStyle |= LVS_LIST;break;273 default: dwStyle |= LVS_LIST;break;274 275 276 if (This->FolderSettings.fFlags & FWF_AUTOARRANGE)dwStyle |= LVS_AUTOARRANGE;277 278 if (This->FolderSettings.fFlags & FWF_SINGLESEL)dwStyle |= LVS_SINGLESEL;279 280 281 282 283 284 285 286 287 288 289 290 291 261 { DWORD dwStyle; 262 263 TRACE("%p\n",This); 264 265 dwStyle = WS_TABSTOP | WS_VISIBLE | WS_CHILDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | 266 LVS_SHAREIMAGELISTS | LVS_EDITLABELS | LVS_ALIGNLEFT | LVS_AUTOARRANGE; 267 268 switch (This->FolderSettings.ViewMode) 269 { 270 case FVM_ICON: dwStyle |= LVS_ICON; break; 271 case FVM_DETAILS: dwStyle |= LVS_REPORT; break; 272 case FVM_SMALLICON: dwStyle |= LVS_SMALLICON; break; 273 case FVM_LIST: dwStyle |= LVS_LIST; break; 274 default: dwStyle |= LVS_LIST; break; 275 } 276 277 if (This->FolderSettings.fFlags & FWF_AUTOARRANGE) dwStyle |= LVS_AUTOARRANGE; 278 /*if (This->FolderSettings.fFlags && FWF_DESKTOP); used from explorer*/ 279 if (This->FolderSettings.fFlags & FWF_SINGLESEL) dwStyle |= LVS_SINGLESEL; 280 281 This->hWndList=CreateWindowExA( WS_EX_CLIENTEDGE, 282 WC_LISTVIEWA, 283 NULL, 284 dwStyle, 285 0,0,0,0, 286 This->hWnd, 287 (HMENU)ID_LISTVIEW, 288 shell32_hInstance, 289 NULL); 290 291 if(!This->hWndList) 292 return FALSE; 292 293 293 294 This->ListViewSortInfo.bIsAscending = TRUE; … … 296 297 297 298 /* UpdateShellSettings(); */ 298 299 return TRUE; 299 300 } 300 301 … … 306 307 static BOOL ShellView_InitList(IShellViewImpl * This) 307 308 { 308 LVCOLUMNAlvColumn;309 SHELLDETAILSsd;310 inti;311 charszTemp[50];312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 } 342 /********************************************************** 343 * ShellView_CompareItems() 309 LVCOLUMNA lvColumn; 310 SHELLDETAILS sd; 311 int i; 312 char szTemp[50]; 313 314 TRACE("%p\n",This); 315 316 ListView_DeleteAllItems(This->hWndList); 317 318 lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT; 319 lvColumn.pszText = szTemp; 320 321 if (This->pSF2Parent) 322 { 323 for (i=0; 1; i++) 324 { 325 if (!SUCCEEDED(IShellFolder2_GetDetailsOf(This->pSF2Parent, NULL, i, &sd))) 326 break; 327 lvColumn.fmt = sd.fmt; 328 lvColumn.cx = sd.cxChar*8; /* chars->pixel */ 329 StrRetToStrNA( szTemp, 50, &sd.str, NULL); 330 ListView_InsertColumnA(This->hWndList, i, &lvColumn); 331 } 332 } 333 else 334 { 335 FIXME("no SF2\n"); 336 } 337 338 ListView_SetImageList(This->hWndList, ShellSmallIconList, LVSIL_SMALL); 339 ListView_SetImageList(This->hWndList, ShellBigIconList, LVSIL_NORMAL); 340 341 return TRUE; 342 } 343 /********************************************************** 344 * ShellView_CompareItems() 344 345 * 345 346 * NOTES 346 347 * internal, CALLBACK for DSA_Sort 347 */ 348 */ 348 349 static INT CALLBACK ShellView_CompareItems(LPVOID lParam1, LPVOID lParam2, LPARAM lpData) 349 350 { 350 351 352 353 354 355 ret = (SHORT) SCODE_CODE(IShellFolder_CompareIDs((LPSHELLFOLDER)lpData, 0, (LPITEMIDLIST)lParam1, (LPITEMIDLIST)lParam2)); 356 357 351 int ret; 352 TRACE("pidl1=%p pidl2=%p lpsf=%p\n", lParam1, lParam2, (LPVOID) lpData); 353 354 if(!lpData) return 0; 355 356 ret = (SHORT) SCODE_CODE(IShellFolder_CompareIDs((LPSHELLFOLDER)lpData, 0, (LPITEMIDLIST)lParam1, (LPITEMIDLIST)lParam2)); 357 TRACE("ret=%i\n",ret); 358 return ret; 358 359 } 359 360 … … 369 370 * 370 371 * RETURNS 371 * A negative value if the first item should precede the second, 372 * a positive value if the first item should follow the second, 372 * A negative value if the first item should precede the second, 373 * a positive value if the first item should follow the second, 373 374 * or zero if the two items are equivalent 374 375 * 375 376 * NOTES 376 * 377 * 378 * 379 * move this code to IShellFolder.380 * 381 * the way this function works is only usable if we had only382 * 377 * FIXME: function does what ShellView_CompareItems is supposed to do. 378 * unify it and figure out how to use the undocumented first parameter 379 * of IShellFolder_CompareIDs to do the job this function does and 380 * move this code to IShellFolder. 381 * make LISTVIEW_SORT_INFO obsolete 382 * the way this function works is only usable if we had only 383 * filesystemfolders (25/10/99 jsch) 383 384 */ 384 385 static INT CALLBACK ShellView_ListViewCompareItems(LPVOID lParam1, LPVOID lParam2, LPARAM lpData) … … 403 404 } 404 405 else 405 { 406 { 406 407 /* Sort by Time: Folders or Files can be sorted */ 407 408 408 409 if(pSortInfo->nHeaderID == LISTVIEW_COLUMN_TIME) 409 410 { … … 442 443 } 443 444 /* If the Date, FileSize, FileType, Attrib was the same, sort by FileName */ 444 445 445 446 if(nDiff == 0) 446 447 { … … 461 462 /********************************************************** 462 463 * LV_FindItemByPidl() 463 */ 464 */ 464 465 static int LV_FindItemByPidl( 465 466 467 { 468 469 470 471 472 473 474 475 476 477 478 479 480 466 IShellViewImpl * This, 467 LPCITEMIDLIST pidl) 468 { 469 LVITEMA lvItem; 470 ZeroMemory(&lvItem, sizeof(LVITEMA)); 471 lvItem.mask = LVIF_PARAM; 472 for(lvItem.iItem = 0; ListView_GetItemA(This->hWndList, &lvItem); lvItem.iItem++) 473 { 474 LPITEMIDLIST currentpidl = (LPITEMIDLIST) lvItem.lParam; 475 HRESULT hr = IShellFolder_CompareIDs(This->pSFParent, 0, pidl, currentpidl); 476 if(SUCCEEDED(hr) && !HRESULT_CODE(hr)) 477 { 478 return lvItem.iItem; 479 } 480 } 481 return -1; 481 482 } 482 483 … … 486 487 static BOOLEAN LV_AddItem(IShellViewImpl * This, LPCITEMIDLIST pidl) 487 488 { 488 LVITEMAlvItem;489 490 491 492 ZeroMemory(&lvItem, sizeof(lvItem));/* create the listview item*/493 lvItem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;/*set the mask*/494 lvItem.iItem = ListView_GetItemCount(This->hWndList);/*add the item to the end of the list*/495 lvItem.lParam = (LPARAM) ILClone(ILFindLastID(pidl));/*set the item's data*/496 lvItem.pszText = LPSTR_TEXTCALLBACKA;/*get text on a callback basis*/497 lvItem.iImage = I_IMAGECALLBACK;/*get the image on a callback basis*/498 489 LVITEMA lvItem; 490 491 TRACE("(%p)(pidl=%p)\n", This, pidl); 492 493 ZeroMemory(&lvItem, sizeof(lvItem)); /* create the listview item*/ 494 lvItem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM; /*set the mask*/ 495 lvItem.iItem = ListView_GetItemCount(This->hWndList); /*add the item to the end of the list*/ 496 lvItem.lParam = (LPARAM) ILClone(ILFindLastID(pidl)); /*set the item's data*/ 497 lvItem.pszText = LPSTR_TEXTCALLBACKA; /*get text on a callback basis*/ 498 lvItem.iImage = I_IMAGECALLBACK; /*get the image on a callback basis*/ 499 return (-1==ListView_InsertItemA(This->hWndList, &lvItem))? FALSE: TRUE; 499 500 } 500 501 … … 504 505 static BOOLEAN LV_DeleteItem(IShellViewImpl * This, LPCITEMIDLIST pidl) 505 506 { 506 507 508 509 510 511 507 int nIndex; 508 509 TRACE("(%p)(pidl=%p)\n", This, pidl); 510 511 nIndex = LV_FindItemByPidl(This, ILFindLastID(pidl)); 512 return (-1==ListView_DeleteItem(This->hWndList, nIndex))? FALSE: TRUE; 512 513 } 513 514 … … 517 518 static BOOLEAN LV_RenameItem(IShellViewImpl * This, LPCITEMIDLIST pidlOld, LPCITEMIDLIST pidlNew ) 518 519 { 519 520 521 522 523 524 525 526 527 ZeroMemory(&lvItem, sizeof(lvItem));/* create the listview item*/528 lvItem.mask = LVIF_PARAM;/* only the pidl */529 530 531 532 533 534 535 lvItem.lParam = (LPARAM) ILClone(ILFindLastID(pidlNew));/* set the item's data */536 537 538 return TRUE;/* fixme: better handling */539 540 520 int nItem; 521 LVITEMA lvItem; 522 523 TRACE("(%p)(pidlold=%p pidlnew=%p)\n", This, pidlOld, pidlNew); 524 525 nItem = LV_FindItemByPidl(This, ILFindLastID(pidlOld)); 526 if ( -1 != nItem ) 527 { 528 ZeroMemory(&lvItem, sizeof(lvItem)); /* create the listview item*/ 529 lvItem.mask = LVIF_PARAM; /* only the pidl */ 530 lvItem.iItem = nItem; 531 ListView_GetItemA(This->hWndList, &lvItem); 532 533 SHFree((LPITEMIDLIST)lvItem.lParam); 534 lvItem.mask = LVIF_PARAM; 535 lvItem.iItem = nItem; 536 lvItem.lParam = (LPARAM) ILClone(ILFindLastID(pidlNew)); /* set the item's data */ 537 ListView_SetItemA(This->hWndList, &lvItem); 538 ListView_Update(This->hWndList, nItem); 539 return TRUE; /* fixme: better handling */ 540 } 541 return FALSE; 541 542 } 542 543 /********************************************************** … … 546 547 * - sorts the list 547 548 * - fills the list into the view 548 */ 549 */ 549 550 550 551 static HRESULT ShellView_FillList(IShellViewImpl * This) 551 552 { 552 LPENUMIDLISTpEnumIDList;553 LPITEMIDLISTpidl;554 DWORDdwFetched;555 UINTi;556 HRESULThRes;557 HDPAhdpa;558 559 560 561 /* get the itemlist from the shfolder*/ 562 563 564 565 566 567 568 569 570 /* create a pointer array */ 571 572 573 574 575 576 577 578 579 580 581 582 583 } 584 585 586 587 588 589 590 SendMessageA(This->hWndList, WM_SETREDRAW, FALSE, 0); 591 592 for (i=0; i < DPA_GetPtrCount(hdpa); ++i)/* DPA_GetPtrCount is a macro*/593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 553 LPENUMIDLIST pEnumIDList; 554 LPITEMIDLIST pidl; 555 DWORD dwFetched; 556 UINT i; 557 HRESULT hRes; 558 HDPA hdpa; 559 560 TRACE("%p\n",This); 561 562 /* get the itemlist from the shfolder*/ 563 hRes = IShellFolder_EnumObjects(This->pSFParent,This->hWnd, SHCONTF_NONFOLDERS | SHCONTF_FOLDERS, &pEnumIDList); 564 if (hRes != S_OK) 565 { 566 if (hRes==S_FALSE) 567 return(NOERROR); 568 return(hRes); 569 } 570 571 /* create a pointer array */ 572 hdpa = pDPA_Create(16); 573 if (!hdpa) 574 { 575 return(E_OUTOFMEMORY); 576 } 577 578 /* copy the items into the array*/ 579 while((S_OK == IEnumIDList_Next(pEnumIDList,1, &pidl, &dwFetched)) && dwFetched) 580 { 581 if (pDPA_InsertPtr(hdpa, 0x7fff, pidl) == -1) 582 { 583 SHFree(pidl); 584 } 585 } 586 587 /* sort the array */ 588 pDPA_Sort(hdpa, ShellView_CompareItems, (LPARAM)This->pSFParent); 589 590 /*turn the listview's redrawing off*/ 591 SendMessageA(This->hWndList, WM_SETREDRAW, FALSE, 0); 592 593 for (i=0; i < DPA_GetPtrCount(hdpa); ++i) /* DPA_GetPtrCount is a macro*/ 594 { 595 pidl = (LPITEMIDLIST)pDPA_GetPtr(hdpa, i); 596 597 /* in a commdlg This works as a filemask*/ 598 if ( IncludeObject(This, pidl)==S_OK ) 599 LV_AddItem(This, pidl); 600 SHFree(pidl); 601 } 602 603 /*turn the listview's redrawing back on and force it to draw*/ 604 SendMessageA(This->hWndList, WM_SETREDRAW, TRUE, 0); 605 606 IEnumIDList_Release(pEnumIDList); /* destroy the list*/ 607 pDPA_Destroy(hdpa); 608 609 return S_OK; 609 610 } 610 611 611 612 /********************************************************** 612 613 * ShellView_OnCreate() 613 */ 614 */ 614 615 static LRESULT ShellView_OnCreate(IShellViewImpl * This) 615 616 { 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 } 654 655 /********************************************************** 656 * 617 IDropTarget* pdt; 618 NOTIFYREGISTER ntreg; 619 IPersistFolder2 * ppf2 = NULL; 620 621 TRACE("%p\n",This); 622 623 if(ShellView_CreateList(This)) 624 { 625 if(ShellView_InitList(This)) 626 { 627 ShellView_FillList(This); 628 } 629 } 630 631 if(GetShellOle()) 632 { 633 if (SUCCEEDED(IShellFolder_CreateViewObject(This->pSFParent, This->hWnd, &IID_IDropTarget, (LPVOID*)&pdt))) 634 { 635 pRegisterDragDrop(This->hWnd, pdt); 636 IDropTarget_Release(pdt); 637 } 638 } 639 640 /* register for receiving notifications */ 641 IShellFolder_QueryInterface(This->pSFParent, &IID_IPersistFolder2, (LPVOID*)&ppf2); 642 if (ppf2) 643 { 644 IPersistFolder2_GetCurFolder(ppf2, &ntreg.pidlPath); 645 ntreg.bWatchSubtree = FALSE; 646 This->hNotify = SHChangeNotifyRegister(This->hWnd, SHCNF_IDLIST, SHCNE_ALLEVENTS, SHV_CHANGE_NOTIFY, 1, &ntreg); 647 SHFree(ntreg.pidlPath); 648 IPersistFolder2_Release(ppf2); 649 } 650 651 This->hAccel = LoadAcceleratorsA(shell32_hInstance, "shv_accel"); 652 653 return S_OK; 654 } 655 656 /********************************************************** 657 * #### Handling of the menus #### 657 658 */ 658 659 … … 661 662 */ 662 663 static HMENU ShellView_BuildFileMenu(IShellViewImpl * This) 663 { CHARszText[MAX_PATH];664 MENUITEMINFOAmii;665 intnTools,i;666 HMENUhSubMenu;667 668 669 670 671 672 673 674 675 676 677 { 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 664 { CHAR szText[MAX_PATH]; 665 MENUITEMINFOA mii; 666 int nTools,i; 667 HMENU hSubMenu; 668 669 TRACE("(%p)\n",This); 670 671 hSubMenu = CreatePopupMenu(); 672 if(hSubMenu) 673 { /*get the number of items in our global array*/ 674 for(nTools = 0; Tools[nTools].idCommand != -1; nTools++){} 675 676 /*add the menu items*/ 677 for(i = 0; i < nTools; i++) 678 { 679 LoadStringA(shell32_hInstance, Tools[i].idMenuString, szText, MAX_PATH); 680 681 ZeroMemory(&mii, sizeof(mii)); 682 mii.cbSize = sizeof(mii); 683 mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE; 684 685 if(TBSTYLE_SEP != Tools[i].bStyle) /* no seperator*/ 686 { 687 mii.fType = MFT_STRING; 688 mii.fState = MFS_ENABLED; 689 mii.dwTypeData = szText; 690 mii.wID = Tools[i].idCommand; 691 } 692 else 693 { 694 mii.fType = MFT_SEPARATOR; 695 } 696 /* tack This item onto the end of the menu */ 697 InsertMenuItemA(hSubMenu, (UINT)-1, TRUE, &mii); 698 } 699 } 700 TRACE("-- return (menu=0x%x)\n",hSubMenu); 701 return hSubMenu; 701 702 } 702 703 /********************************************************** … … 704 705 */ 705 706 static void ShellView_MergeFileMenu(IShellViewImpl * This, HMENU hSubMenu) 706 { 707 708 709 710 711 712 713 714 TRACE("--\n"); 707 { TRACE("(%p)->(submenu=0x%08x) stub\n",This,hSubMenu); 708 709 if(hSubMenu) 710 { /*insert This item at the beginning of the menu */ 711 _InsertMenuItem(hSubMenu, 0, TRUE, 0, MFT_SEPARATOR, NULL, MFS_ENABLED); 712 _InsertMenuItem(hSubMenu, 0, TRUE, IDM_MYFILEITEM, MFT_STRING, "dummy45", MFS_ENABLED); 713 714 } 715 TRACE("--\n"); 715 716 } 716 717 … … 720 721 721 722 static void ShellView_MergeViewMenu(IShellViewImpl * This, HMENU hSubMenu) 722 { MENUITEMINFOAmii;723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 723 { MENUITEMINFOA mii; 724 725 TRACE("(%p)->(submenu=0x%08x)\n",This,hSubMenu); 726 727 if(hSubMenu) 728 { /*add a separator at the correct position in the menu*/ 729 _InsertMenuItem(hSubMenu, FCIDM_MENU_VIEW_SEP_OPTIONS, FALSE, 0, MFT_SEPARATOR, NULL, MFS_ENABLED); 730 731 ZeroMemory(&mii, sizeof(mii)); 732 mii.cbSize = sizeof(mii); 733 mii.fMask = MIIM_SUBMENU | MIIM_TYPE | MIIM_DATA;; 734 mii.fType = MFT_STRING; 735 mii.dwTypeData = "View"; 736 mii.hSubMenu = LoadMenuA(shell32_hInstance, "MENU_001"); 737 InsertMenuItemA(hSubMenu, FCIDM_MENU_VIEW_SEP_OPTIONS, FALSE, &mii); 738 } 738 739 } 739 740 … … 745 746 * RETURNS 746 747 * number of selected items 747 */ 748 */ 748 749 static UINT ShellView_GetSelections(IShellViewImpl * This) 749 750 { 750 LVITEMAlvItem;751 UINTi = 0;752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 } 785 /********************************************************** 786 * 751 LVITEMA lvItem; 752 UINT i = 0; 753 754 if (This->apidl) 755 { 756 SHFree(This->apidl); 757 } 758 759 This->cidl = ListView_GetSelectedCount(This->hWndList); 760 This->apidl = (LPITEMIDLIST*)SHAlloc(This->cidl * sizeof(LPITEMIDLIST)); 761 762 TRACE("selected=%i\n", This->cidl); 763 764 if(This->apidl) 765 { 766 TRACE("-- Items selected =%u\n", This->cidl); 767 768 ZeroMemory(&lvItem, sizeof(lvItem)); 769 lvItem.mask = LVIF_STATE | LVIF_PARAM; 770 lvItem.stateMask = LVIS_SELECTED; 771 772 while(ListView_GetItemA(This->hWndList, &lvItem) && (i < This->cidl)) 773 { 774 if(lvItem.state & LVIS_SELECTED) 775 { 776 This->apidl[i] = (LPITEMIDLIST)lvItem.lParam; 777 i++; 778 TRACE("-- selected Item found\n"); 779 } 780 lvItem.iItem++; 781 } 782 } 783 return This->cidl; 784 785 } 786 /********************************************************** 787 * ShellView_DoContextMenu() 787 788 */ 788 789 static void ShellView_DoContextMenu(IShellViewImpl * This, WORD x, WORD y, BOOL bDefault) 789 { UINTuCommand;790 DWORDwFlags;791 HMENUhMenu;792 BOOLfExplore = FALSE;793 HWNDhwndTree = 0;794 LPCONTEXTMENUpContextMenu = NULL;795 IContextMenu *pCM = NULL;796 CMINVOKECOMMANDINFOcmi;797 798 799 800 801 802 803 IShellFolder_GetUIObjectOf( This->pSFParent, This->hWndParent, This->cidl, This->apidl, 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 } 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 else/* background context menu */863 { 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 } 883 884 /********************************************************** 885 * 790 { UINT uCommand; 791 DWORD wFlags; 792 HMENU hMenu; 793 BOOL fExplore = FALSE; 794 HWND hwndTree = 0; 795 LPCONTEXTMENU pContextMenu = NULL; 796 IContextMenu * pCM = NULL; 797 CMINVOKECOMMANDINFO cmi; 798 799 TRACE("(%p)->(0x%08x 0x%08x 0x%08x) stub\n",This, x, y, bDefault); 800 801 /* look, what's selected and create a context menu object of it*/ 802 if( ShellView_GetSelections(This) ) 803 { 804 IShellFolder_GetUIObjectOf( This->pSFParent, This->hWndParent, This->cidl, This->apidl, 805 (REFIID)&IID_IContextMenu, NULL, (LPVOID *)&pContextMenu); 806 807 if(pContextMenu) 808 { 809 TRACE("-- pContextMenu\n"); 810 hMenu = CreatePopupMenu(); 811 812 if( hMenu ) 813 { 814 /* See if we are in Explore or Open mode. If the browser's tree is present, we are in Explore mode.*/ 815 if(SUCCEEDED(IShellBrowser_GetControlWindow(This->pShellBrowser,FCW_TREE, &hwndTree)) && hwndTree) 816 { 817 TRACE("-- explore mode\n"); 818 fExplore = TRUE; 819 } 820 821 /* build the flags depending on what we can do with the selected item */ 822 wFlags = CMF_NORMAL | (This->cidl != 1 ? 0 : CMF_CANRENAME) | (fExplore ? CMF_EXPLORE : 0); 823 824 /* let the ContextMenu merge its items in */ 825 if (SUCCEEDED(IContextMenu_QueryContextMenu( pContextMenu, hMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, wFlags ))) 826 { 827 if( bDefault ) 828 { 829 TRACE("-- get menu default command\n"); 830 uCommand = GetMenuDefaultItem(hMenu, FALSE, GMDI_GOINTOPOPUPS); 831 } 832 else 833 { 834 TRACE("-- track popup\n"); 835 uCommand = TrackPopupMenu( hMenu,TPM_LEFTALIGN | TPM_RETURNCMD,x,y,0,This->hWnd,NULL); 836 } 837 838 if(uCommand > 0) 839 { 840 TRACE("-- uCommand=%u\n", uCommand); 841 if (IsInCommDlg(This) && ((uCommand==FCIDM_SHVIEW_EXPLORE) || (uCommand==FCIDM_SHVIEW_OPEN))) 842 { 843 TRACE("-- dlg: OnDefaultCommand\n"); 844 OnDefaultCommand(This); 845 } 846 else 847 { 848 TRACE("-- explore -- invoke command\n"); 849 ZeroMemory(&cmi, sizeof(cmi)); 850 cmi.cbSize = sizeof(cmi); 851 cmi.hwnd = This->hWndParent; /* this window has to answer CWM_GETISHELLBROWSER */ 852 cmi.lpVerb = (LPCSTR)MAKEINTRESOURCEA(uCommand); 853 IContextMenu_InvokeCommand(pContextMenu, &cmi); 854 } 855 } 856 DestroyMenu(hMenu); 857 } 858 } 859 if (pContextMenu) 860 IContextMenu_Release(pContextMenu); 861 } 862 } 863 else /* background context menu */ 864 { 865 hMenu = CreatePopupMenu(); 866 867 pCM = ISvBgCm_Constructor(This->pSFParent); 868 IContextMenu_QueryContextMenu(pCM, hMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, 0); 869 870 uCommand = TrackPopupMenu( hMenu, TPM_LEFTALIGN | TPM_RETURNCMD,x,y,0,This->hWnd,NULL); 871 DestroyMenu(hMenu); 872 873 TRACE("-- (%p)->(uCommand=0x%08x )\n",This, uCommand); 874 875 ZeroMemory(&cmi, sizeof(cmi)); 876 cmi.cbSize = sizeof(cmi); 877 cmi.lpVerb = (LPCSTR)MAKEINTRESOURCEA(uCommand); 878 cmi.hwnd = This->hWndParent; 879 IContextMenu_InvokeCommand(pCM, &cmi); 880 881 IContextMenu_Release(pCM); 882 } 883 } 884 885 /********************************************************** 886 * ##### message handling ##### 886 887 */ 887 888 … … 891 892 static LRESULT ShellView_OnSize(IShellViewImpl * This, WORD wWidth, WORD wHeight) 892 893 { 893 894 895 896 897 898 899 900 901 894 TRACE("%p width=%u height=%u\n",This, wWidth,wHeight); 895 896 /*resize the ListView to fit our window*/ 897 if(This->hWndList) 898 { 899 MoveWindow(This->hWndList, 0, 0, wWidth, wHeight, TRUE); 900 } 901 902 return S_OK; 902 903 } 903 904 /********************************************************** … … 906 907 * NOTES 907 908 * internal 908 */ 909 */ 909 910 static void ShellView_OnDeactivate(IShellViewImpl * This) 910 911 { 911 912 913 914 915 916 917 918 919 920 921 922 923 924 912 TRACE("%p\n",This); 913 914 if(This->uState != SVUIA_DEACTIVATE) 915 { 916 if(This->hMenu) 917 { 918 IShellBrowser_SetMenuSB(This->pShellBrowser,0, 0, 0); 919 IShellBrowser_RemoveMenusSB(This->pShellBrowser,This->hMenu); 920 DestroyMenu(This->hMenu); 921 This->hMenu = 0; 922 } 923 924 This->uState = SVUIA_DEACTIVATE; 925 } 925 926 } 926 927 927 928 /********************************************************** 928 929 * ShellView_OnActivate() 929 */ 930 */ 930 931 static LRESULT ShellView_OnActivate(IShellViewImpl * This, UINT uState) 931 { 932 933 934 935 TRACE("%p uState=%x\n",This,uState); 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 TRACE("-- after fnInsertMenusSB\n"); 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 TRACE("-- before fnSetMenuSB\n"); 997 998 999 1000 1001 TRACE("--\n"); 1002 932 { OLEMENUGROUPWIDTHS omw = { {0, 0, 0, 0, 0, 0} }; 933 MENUITEMINFOA mii; 934 CHAR szText[MAX_PATH]; 935 936 TRACE("%p uState=%x\n",This,uState); 937 938 /*don't do anything if the state isn't really changing */ 939 if(This->uState == uState) 940 { 941 return S_OK; 942 } 943 944 ShellView_OnDeactivate(This); 945 946 /*only do This if we are active */ 947 if(uState != SVUIA_DEACTIVATE) 948 { 949 /*merge the menus */ 950 This->hMenu = CreateMenu(); 951 952 if(This->hMenu) 953 { 954 IShellBrowser_InsertMenusSB(This->pShellBrowser, This->hMenu, &omw); 955 TRACE("-- after fnInsertMenusSB\n"); 956 957 /*build the top level menu get the menu item's text*/ 958 strcpy(szText,"dummy 31"); 959 960 ZeroMemory(&mii, sizeof(mii)); 961 mii.cbSize = sizeof(mii); 962 mii.fMask = MIIM_SUBMENU | MIIM_TYPE | MIIM_STATE; 963 mii.fType = MFT_STRING; 964 mii.fState = MFS_ENABLED; 965 mii.dwTypeData = szText; 966 mii.hSubMenu = ShellView_BuildFileMenu(This); 967 968 /*insert our menu into the menu bar*/ 969 if(mii.hSubMenu) 970 { 971 InsertMenuItemA(This->hMenu, FCIDM_MENU_HELP, FALSE, &mii); 972 } 973 974 /*get the view menu so we can merge with it*/ 975 ZeroMemory(&mii, sizeof(mii)); 976 mii.cbSize = sizeof(mii); 977 mii.fMask = MIIM_SUBMENU; 978 979 if(GetMenuItemInfoA(This->hMenu, FCIDM_MENU_VIEW, FALSE, &mii)) 980 { 981 ShellView_MergeViewMenu(This, mii.hSubMenu); 982 } 983 984 /*add the items that should only be added if we have the focus*/ 985 if(SVUIA_ACTIVATE_FOCUS == uState) 986 { 987 /*get the file menu so we can merge with it */ 988 ZeroMemory(&mii, sizeof(mii)); 989 mii.cbSize = sizeof(mii); 990 mii.fMask = MIIM_SUBMENU; 991 992 if(GetMenuItemInfoA(This->hMenu, FCIDM_MENU_FILE, FALSE, &mii)) 993 { 994 ShellView_MergeFileMenu(This, mii.hSubMenu); 995 } 996 } 997 TRACE("-- before fnSetMenuSB\n"); 998 IShellBrowser_SetMenuSB(This->pShellBrowser, This->hMenu, 0, This->hWnd); 999 } 1000 } 1001 This->uState = uState; 1002 TRACE("--\n"); 1003 return S_OK; 1003 1004 } 1004 1005 … … 1009 1010 static LRESULT ShellView_OnSetFocus(IShellViewImpl * This) 1010 1011 { 1011 1012 1013 1014 should always be done before merging menus (OnActivate merges the 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1012 TRACE("%p\n",This); 1013 1014 /* Tell the browser one of our windows has received the focus. This 1015 should always be done before merging menus (OnActivate merges the 1016 menus) if one of our windows has the focus.*/ 1017 1018 IShellBrowser_OnViewWindowActive(This->pShellBrowser,(IShellView*) This); 1019 ShellView_OnActivate(This, SVUIA_ACTIVATE_FOCUS); 1020 1021 /* Set the focus to the listview */ 1022 SetFocus(This->hWndList); 1023 1024 /* Notify the ICommDlgBrowser interface */ 1025 OnStateChange(This,CDBOSC_SETFOCUS); 1026 1027 return 0; 1027 1028 } 1028 1029 1029 1030 /********************************************************** 1030 1031 * ShellView_OnKillFocus() 1031 */ 1032 */ 1032 1033 static LRESULT ShellView_OnKillFocus(IShellViewImpl * This) 1033 1034 { 1034 1035 1036 1037 1038 1039 1040 1035 TRACE("(%p) stub\n",This); 1036 1037 ShellView_OnActivate(This, SVUIA_ACTIVATE_NOFOCUS); 1038 /* Notify the ICommDlgBrowser */ 1039 OnStateChange(This,CDBOSC_KILLFOCUS); 1040 1041 return 0; 1041 1042 } 1042 1043 … … 1045 1046 * 1046 1047 * NOTES 1047 * 1048 */ 1048 * the CmdID's are the ones from the context menu 1049 */ 1049 1050 static LRESULT ShellView_OnCommand(IShellViewImpl * This,DWORD dwCmdID, DWORD dwCmd, HWND hwndCmd) 1050 1051 { 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1052 TRACE("(%p)->(0x%08lx 0x%08lx 0x%08x) stub\n",This, dwCmdID, dwCmd, hwndCmd); 1053 1054 switch(dwCmdID) 1055 { 1056 case FCIDM_SHVIEW_SMALLICON: 1057 This->FolderSettings.ViewMode = FVM_SMALLICON; 1058 SetStyle (This, LVS_SMALLICON, LVS_TYPEMASK); 1059 CheckToolbar(This); 1060 break; 1061 1062 case FCIDM_SHVIEW_BIGICON: 1063 This->FolderSettings.ViewMode = FVM_ICON; 1064 SetStyle (This, LVS_ICON, LVS_TYPEMASK); 1065 CheckToolbar(This); 1066 break; 1067 1068 case FCIDM_SHVIEW_LISTVIEW: 1069 This->FolderSettings.ViewMode = FVM_LIST; 1070 SetStyle (This, LVS_LIST, LVS_TYPEMASK); 1071 CheckToolbar(This); 1072 break; 1073 1074 case FCIDM_SHVIEW_REPORTVIEW: 1075 This->FolderSettings.ViewMode = FVM_DETAILS; 1076 SetStyle (This, LVS_REPORT, LVS_TYPEMASK); 1077 CheckToolbar(This); 1078 break; 1079 1080 /* the menu-ID's for sorting are 0x30... see shrec.rc */ 1081 case 0x30: 1082 case 0x31: 1083 case 0x32: 1084 case 0x33: 1085 This->ListViewSortInfo.nHeaderID = (LPARAM) (dwCmdID - 0x30); 1086 This->ListViewSortInfo.bIsAscending = TRUE; 1087 This->ListViewSortInfo.nLastHeaderID = This->ListViewSortInfo.nHeaderID; 1088 ListView_SortItems(This->hWndList, ShellView_ListViewCompareItems, (LPARAM) (&(This->ListViewSortInfo))); 1089 break; 1090 1091 default: 1092 TRACE("-- COMMAND 0x%04lx unhandled\n", dwCmdID); 1093 } 1094 return 0; 1094 1095 } 1095 1096 … … 1097 1098 * ShellView_OnNotify() 1098 1099 */ 1099 1100 1100 1101 static LRESULT ShellView_OnNotify(IShellViewImpl * This, UINT CtlID, LPNMHDR lpnmh) 1101 { 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 if(lpdi->item.mask & LVIF_TEXT)/* text requested */1158 1159 1160 1161 1162 1163 1164 TRACE("-- text=%s\n",lpdi->item.pszText); 1165 1166 1167 1168 1169 1170 1171 if(lpdi->item.mask & LVIF_IMAGE)/* image requested */1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 { 1188 1189 1190 1191 1192 1193 1194 1195 1196 IDropSource * pds = (IDropSource*)&(This->lpvtblDropSource);/* own DropSource interface */1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1102 { LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)lpnmh; 1103 NMLVDISPINFOA *lpdi = (NMLVDISPINFOA *)lpnmh; 1104 LPITEMIDLIST pidl; 1105 1106 TRACE("%p CtlID=%u lpnmh->code=%x\n",This,CtlID,lpnmh->code); 1107 1108 switch(lpnmh->code) 1109 { 1110 case NM_SETFOCUS: 1111 TRACE("-- NM_SETFOCUS %p\n",This); 1112 ShellView_OnSetFocus(This); 1113 break; 1114 1115 case NM_KILLFOCUS: 1116 TRACE("-- NM_KILLFOCUS %p\n",This); 1117 ShellView_OnDeactivate(This); 1118 /* Notify the ICommDlgBrowser interface */ 1119 OnStateChange(This,CDBOSC_KILLFOCUS); 1120 break; 1121 1122 case HDN_ENDTRACKA: 1123 TRACE("-- HDN_ENDTRACKA %p\n",This); 1124 /*nColumn1 = ListView_GetColumnWidth(This->hWndList, 0); 1125 nColumn2 = ListView_GetColumnWidth(This->hWndList, 1);*/ 1126 break; 1127 1128 case LVN_DELETEITEM: 1129 TRACE("-- LVN_DELETEITEM %p\n",This); 1130 SHFree((LPITEMIDLIST)lpnmlv->lParam); /*delete the pidl because we made a copy of it*/ 1131 break; 1132 1133 case LVN_ITEMACTIVATE: 1134 TRACE("-- LVN_ITEMACTIVATE %p\n",This); 1135 OnStateChange(This, CDBOSC_SELCHANGE); /* the browser will get the IDataObject now */ 1136 ShellView_DoContextMenu(This, 0, 0, TRUE); 1137 break; 1138 1139 case LVN_COLUMNCLICK: 1140 This->ListViewSortInfo.nHeaderID = lpnmlv->iSubItem; 1141 if(This->ListViewSortInfo.nLastHeaderID == This->ListViewSortInfo.nHeaderID) 1142 { 1143 This->ListViewSortInfo.bIsAscending = !This->ListViewSortInfo.bIsAscending; 1144 } 1145 else 1146 { 1147 This->ListViewSortInfo.bIsAscending = TRUE; 1148 } 1149 This->ListViewSortInfo.nLastHeaderID = This->ListViewSortInfo.nHeaderID; 1150 1151 ListView_SortItems(lpnmlv->hdr.hwndFrom, ShellView_ListViewCompareItems, (LPARAM) (&(This->ListViewSortInfo))); 1152 break; 1153 1154 case LVN_GETDISPINFOA: 1155 TRACE("-- LVN_GETDISPINFOA %p\n",This); 1156 pidl = (LPITEMIDLIST)lpdi->item.lParam; 1157 1158 if(lpdi->item.mask & LVIF_TEXT) /* text requested */ 1159 { 1160 if (This->pSF2Parent) 1161 { 1162 SHELLDETAILS sd; 1163 IShellFolder2_GetDetailsOf(This->pSF2Parent, pidl, lpdi->item.iSubItem, &sd); 1164 StrRetToStrNA( lpdi->item.pszText, lpdi->item.cchTextMax, &sd.str, NULL); 1165 TRACE("-- text=%s\n",lpdi->item.pszText); 1166 } 1167 else 1168 { 1169 FIXME("no SF2\n"); 1170 } 1171 } 1172 if(lpdi->item.mask & LVIF_IMAGE) /* image requested */ 1173 { 1174 lpdi->item.iImage = SHMapPIDLToSystemImageListIndex(This->pSFParent, pidl, 0); 1175 } 1176 break; 1177 1178 case LVN_ITEMCHANGED: 1179 TRACE("-- LVN_ITEMCHANGED %p\n",This); 1180 OnStateChange(This, CDBOSC_SELCHANGE); /* the browser will get the IDataObject now */ 1181 break; 1182 1183 case LVN_BEGINDRAG: 1184 case LVN_BEGINRDRAG: 1185 TRACE("-- LVN_BEGINDRAG\n"); 1186 1187 if (ShellView_GetSelections(This)) 1188 { 1189 IDataObject * pda; 1190 DWORD dwAttributes = SFGAO_CANLINK; 1191 DWORD dwEffect = DROPEFFECT_COPY | DROPEFFECT_MOVE; 1192 1193 if(GetShellOle()) 1194 { 1195 if (SUCCEEDED(IShellFolder_GetUIObjectOf(This->pSFParent, This->hWnd, This->cidl, This->apidl, &IID_IDataObject,0,(LPVOID *)&pda))) 1196 { 1197 IDropSource * pds = (IDropSource*)&(This->lpvtblDropSource); /* own DropSource interface */ 1198 1199 if (SUCCEEDED(IShellFolder_GetAttributesOf(This->pSFParent, This->cidl, This->apidl, &dwAttributes))) 1200 { 1201 if (dwAttributes & SFGAO_CANLINK) 1202 { 1203 dwEffect |= DROPEFFECT_LINK; 1204 } 1205 } 1206 1207 if (pds) 1208 { 1209 DWORD dwEffect; 1210 pDoDragDrop(pda, pds, dwEffect, &dwEffect); 1211 } 1212 IDataObject_Release(pda); 1213 } 1214 } 1215 } 1216 break; 1217 1218 case LVN_BEGINLABELEDITA: 1219 { 1220 DWORD dwAttr = SFGAO_CANRENAME; 1221 pidl = (LPITEMIDLIST)lpdi->item.lParam; 1222 1223 TRACE("-- LVN_BEGINLABELEDITA %p\n",This); 1224 1225 IShellFolder_GetAttributesOf(This->pSFParent, 1, &pidl, &dwAttr); 1226 if (SFGAO_CANRENAME & dwAttr) 1227 { 1228 return FALSE; 1229 } 1230 return TRUE; 1231 } 1232 break; 1233 1234 case LVN_ENDLABELEDITA: 1235 { 1236 TRACE("-- LVN_ENDLABELEDITA %p\n",This); 1237 if (lpdi->item.pszText) 1238 { 1239 HRESULT hr; 1240 WCHAR wszNewName[MAX_PATH]; 1241 LVITEMA lvItem; 1242 1243 ZeroMemory(&lvItem, sizeof(LVITEMA)); 1244 lvItem.iItem = lpdi->item.iItem; 1245 lvItem.mask = LVIF_PARAM; 1246 ListView_GetItemA(This->hWndList, &lvItem); 1247 1248 pidl = (LPITEMIDLIST)lpdi->item.lParam; 1248 1249 if (!MultiByteToWideChar( CP_ACP, 0, lpdi->item.pszText, -1, wszNewName, MAX_PATH )) 1249 1250 wszNewName[MAX_PATH-1] = 0; 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1251 hr = IShellFolder_SetNameOf(This->pSFParent, 0, pidl, wszNewName, SHGDN_INFOLDER, &pidl); 1252 1253 if(SUCCEEDED(hr) && pidl) 1254 { 1255 lvItem.mask = LVIF_PARAM; 1256 lvItem.lParam = (LPARAM)pidl; 1257 ListView_SetItemA(This->hWndList, &lvItem); 1258 return TRUE; 1259 } 1260 } 1261 return FALSE; 1262 } 1263 break; 1264 1265 case LVN_KEYDOWN: 1266 { 1267 /* MSG msg; 1268 msg.hwnd = This->hWnd; 1269 msg.message = WM_KEYDOWN; 1270 msg.wParam = plvKeyDown->wVKey; 1271 msg.lParam = 0; 1272 msg.time = 0; 1273 msg.pt = 0;*/ 1274 1275 LPNMLVKEYDOWN plvKeyDown = (LPNMLVKEYDOWN) lpnmh; 1275 1276 1276 1277 /* initiate a rename of the selected file or directory */ … … 1285 1286 /* get selected item */ 1286 1287 i = ListView_GetNextItem(This->hWndList, -1, 1287 1288 1288 LVNI_SELECTED); 1289 1289 1290 ListView_EnsureVisible(This->hWndList, i, 0); 1290 1291 ListView_EditLabelA(This->hWndList, i); … … 1292 1293 } 1293 1294 #if 0 1294 1295 TranslateAccelerator(This->hWnd, This->hAccel, &msg) 1295 1296 #endif 1296 1297 else if(plvKeyDown->wVKey == VK_DELETE) 1297 1298 { 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 pItems = HeapAlloc(GetProcessHeap(), 0, 1311 1312 1313 1314 1315 1316 1317 1318 1319 item_index = ListView_GetNextItem(This->hWndList, 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1299 int i, item_index; 1300 LVITEMA item; 1301 LPITEMIDLIST* pItems; 1302 ISFHelper *psfhlp; 1303 1304 IShellFolder_QueryInterface(This->pSFParent, &IID_ISFHelper, 1305 (LPVOID*)&psfhlp); 1306 1307 if(!(i = ListView_GetSelectedCount(This->hWndList))) 1308 break; 1309 1310 /* allocate memory for the pidl array */ 1311 pItems = HeapAlloc(GetProcessHeap(), 0, 1312 sizeof(LPITEMIDLIST) * i); 1313 1314 /* retrieve all selected items */ 1315 i = 0; 1316 item_index = -1; 1317 while(ListView_GetSelectedCount(This->hWndList) > i) 1318 { 1319 /* get selected item */ 1320 item_index = ListView_GetNextItem(This->hWndList, 1321 item_index, LVNI_SELECTED); 1322 item.iItem = item_index; 1323 ListView_GetItemA(This->hWndList, &item); 1324 1325 /* get item pidl */ 1326 pItems[i] = (LPITEMIDLIST)item.lParam; 1327 1328 i++; 1329 } 1330 1331 /* perform the item deletion */ 1332 ISFHelper_DeleteItems(psfhlp, i, pItems); 1333 1334 /* free pidl array memory */ 1335 HeapFree(GetProcessHeap(), 0, pItems); 1335 1336 } 1336 1337 else 1337 1338 1339 1340 1341 1342 1343 1344 1345 1338 FIXME("LVN_KEYDOWN key=0x%08x\n",plvKeyDown->wVKey); 1339 } 1340 break; 1341 1342 default: 1343 TRACE("-- %p WM_COMMAND %x unhandled\n", This, lpnmh->code); 1344 break;; 1345 } 1346 return 0; 1346 1347 } 1347 1348 … … 1353 1354 { 1354 1355 1355 1356 1357 { 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1356 TRACE("(%p)(%p,%p,0x%08lx)\n", This, Pidls[0], Pidls[1], wEventId); 1357 switch(wEventId) 1358 { 1359 case SHCNE_MKDIR: 1360 case SHCNE_CREATE: 1361 LV_AddItem(This, Pidls[0]); 1362 break; 1363 case SHCNE_RMDIR: 1364 case SHCNE_DELETE: 1365 LV_DeleteItem(This, Pidls[0]); 1366 break; 1367 case SHCNE_RENAMEFOLDER: 1368 case SHCNE_RENAMEITEM: 1369 LV_RenameItem(This, Pidls[0], Pidls[1]); 1370 break; 1371 case SHCNE_UPDATEITEM: 1372 break; 1373 } 1374 return TRUE; 1374 1375 } 1375 1376 /********************************************************** … … 1379 1380 static LRESULT CALLBACK ShellView_WndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam) 1380 1381 { 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 case WM_SIZE:return ShellView_OnSize(pThis,LOWORD(lParam), HIWORD(lParam));1396 case WM_SETFOCUS:return ShellView_OnSetFocus(pThis);1397 case WM_KILLFOCUS:return ShellView_OnKillFocus(pThis);1398 case WM_CREATE:return ShellView_OnCreate(pThis);1399 case WM_ACTIVATE:return ShellView_OnActivate(pThis, SVUIA_ACTIVATE_FOCUS);1400 case WM_NOTIFY:return ShellView_OnNotify(pThis,(UINT)wParam, (LPNMHDR)lParam);1401 case WM_COMMAND: return ShellView_OnCommand(pThis, 1402 GET_WM_COMMAND_ID(wParam, lParam), 1403 GET_WM_COMMAND_CMD(wParam, lParam), 1404 1405 1406 1407 1408 1409 1410 case WM_SHOWWINDOW:UpdateWindow(pThis->hWndList);1411 1412 1413 1414 1415 case WM_DESTROY:if(GetShellOle())1416 1417 1418 1419 1420 1421 1422 1423 1382 IShellViewImpl * pThis = (IShellViewImpl*)GetWindowLongA(hWnd, GWL_USERDATA); 1383 LPCREATESTRUCTA lpcs; 1384 1385 TRACE("(hwnd=%x msg=%x wparm=%x lparm=%lx)\n",hWnd, uMessage, wParam, lParam); 1386 1387 switch (uMessage) 1388 { 1389 case WM_NCCREATE: 1390 lpcs = (LPCREATESTRUCTA)lParam; 1391 pThis = (IShellViewImpl*)(lpcs->lpCreateParams); 1392 SetWindowLongA(hWnd, GWL_USERDATA, (LONG)pThis); 1393 pThis->hWnd = hWnd; /*set the window handle*/ 1394 break; 1395 1396 case WM_SIZE: return ShellView_OnSize(pThis,LOWORD(lParam), HIWORD(lParam)); 1397 case WM_SETFOCUS: return ShellView_OnSetFocus(pThis); 1398 case WM_KILLFOCUS: return ShellView_OnKillFocus(pThis); 1399 case WM_CREATE: return ShellView_OnCreate(pThis); 1400 case WM_ACTIVATE: return ShellView_OnActivate(pThis, SVUIA_ACTIVATE_FOCUS); 1401 case WM_NOTIFY: return ShellView_OnNotify(pThis,(UINT)wParam, (LPNMHDR)lParam); 1402 case WM_COMMAND: return ShellView_OnCommand(pThis, 1403 GET_WM_COMMAND_ID(wParam, lParam), 1404 GET_WM_COMMAND_CMD(wParam, lParam), 1405 GET_WM_COMMAND_HWND(wParam, lParam)); 1406 case SHV_CHANGE_NOTIFY: return ShellView_OnChange(pThis, (LPITEMIDLIST*)wParam, (LONG)lParam); 1407 1408 case WM_CONTEXTMENU: ShellView_DoContextMenu(pThis, LOWORD(lParam), HIWORD(lParam), FALSE); 1409 return 0; 1410 1411 case WM_SHOWWINDOW: UpdateWindow(pThis->hWndList); 1412 break; 1413 1414 case WM_GETDLGCODE: return SendMessageA(pThis->hWndList,uMessage,0,0); 1415 1416 case WM_DESTROY: if(GetShellOle()) 1417 { 1418 pRevokeDragDrop(pThis->hWnd); 1419 } 1420 SHChangeNotifyDeregister(pThis->hNotify); 1421 break; 1422 } 1423 1424 return DefWindowProcA (hWnd, uMessage, wParam, lParam); 1424 1425 } 1425 1426 /********************************************************** … … 1434 1435 static HRESULT WINAPI IShellView_fnQueryInterface(IShellView * iface,REFIID riid, LPVOID *ppvObj) 1435 1436 { 1436 1437 1438 1439 1440 1441 1442 1443 1444 *ppvObj = This; 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1437 ICOM_THIS(IShellViewImpl, iface); 1438 1439 TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj); 1440 1441 *ppvObj = NULL; 1442 1443 if(IsEqualIID(riid, &IID_IUnknown)) 1444 { 1445 *ppvObj = This; 1446 } 1447 else if(IsEqualIID(riid, &IID_IShellView)) 1448 { 1449 *ppvObj = (IShellView*)This; 1450 } 1451 else if(IsEqualIID(riid, &IID_IOleCommandTarget)) 1452 { 1453 *ppvObj = (IOleCommandTarget*)&(This->lpvtblOleCommandTarget); 1454 } 1455 else if(IsEqualIID(riid, &IID_IDropTarget)) 1456 { 1457 *ppvObj = (IDropTarget*)&(This->lpvtblDropTarget); 1458 } 1459 else if(IsEqualIID(riid, &IID_IDropSource)) 1460 { 1461 *ppvObj = (IDropSource*)&(This->lpvtblDropSource); 1462 } 1463 else if(IsEqualIID(riid, &IID_IViewObject)) 1464 { 1465 *ppvObj = (IViewObject*)&(This->lpvtblViewObject); 1466 } 1467 1468 if(*ppvObj) 1469 { 1470 IUnknown_AddRef( (IUnknown*)*ppvObj ); 1471 TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj); 1472 return S_OK; 1473 } 1474 TRACE("-- Interface: E_NOINTERFACE\n"); 1475 return E_NOINTERFACE; 1475 1476 } 1476 1477 … … 1480 1481 static ULONG WINAPI IShellView_fnAddRef(IShellView * iface) 1481 1482 { 1482 1483 1484 1485 1486 1487 1483 ICOM_THIS(IShellViewImpl, iface); 1484 1485 TRACE("(%p)->(count=%lu)\n",This,This->ref); 1486 1487 shell32_ObjCount++; 1488 return ++(This->ref); 1488 1489 } 1489 1490 /********************************************************** … … 1492 1493 static ULONG WINAPI IShellView_fnRelease(IShellView * iface) 1493 1494 { 1494 1495 1496 1497 1498 1499 1500 if (!--(This->ref)) 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1495 ICOM_THIS(IShellViewImpl, iface); 1496 1497 TRACE("(%p)->()\n",This); 1498 1499 shell32_ObjCount--; 1500 1501 if (!--(This->ref)) 1502 { 1503 TRACE(" destroying IShellView(%p)\n",This); 1504 1505 if(This->pSFParent) 1506 IShellFolder_Release(This->pSFParent); 1507 1508 if(This->pSF2Parent) 1509 IShellFolder2_Release(This->pSF2Parent); 1510 1511 if (This->apidl) 1512 SHFree(This->apidl); 1513 1514 if (This->pCommDlgBrowser) 1515 ICommDlgBrowser_Release(This->pCommDlgBrowser); 1516 1517 HeapFree(GetProcessHeap(),0,This); 1518 return 0; 1519 } 1520 return This->ref; 1520 1521 } 1521 1522 … … 1525 1526 static HRESULT WINAPI IShellView_fnGetWindow(IShellView * iface,HWND * phWnd) 1526 1527 { 1527 1528 1529 1530 1531 1532 1533 1528 ICOM_THIS(IShellViewImpl, iface); 1529 1530 TRACE("(%p)\n",This); 1531 1532 *phWnd = This->hWnd; 1533 1534 return S_OK; 1534 1535 } 1535 1536 1536 1537 static HRESULT WINAPI IShellView_fnContextSensitiveHelp(IShellView * iface,BOOL fEnterMode) 1537 1538 { 1538 1539 1540 1541 1542 1539 ICOM_THIS(IShellViewImpl, iface); 1540 1541 FIXME("(%p) stub\n",This); 1542 1543 return E_NOTIMPL; 1543 1544 } 1544 1545 … … 1552 1553 { 1553 1554 #if 0 1554 1555 1556 1555 ICOM_THIS(IShellViewImpl, iface); 1556 1557 FIXME("(%p)->(%p: hwnd=%x msg=%x lp=%lx wp=%x) stub\n",This,lpmsg, lpmsg->hwnd, lpmsg->message, lpmsg->lParam, lpmsg->wParam); 1557 1558 #endif 1558 1559 1560 1561 1562 1563 1559 1560 if ((lpmsg->message>=WM_KEYFIRST) && (lpmsg->message>=WM_KEYLAST)) 1561 { 1562 TRACE("-- key=0x04%x",lpmsg->wParam) ; 1563 } 1564 return S_FALSE; /* not handled */ 1564 1565 } 1565 1566 1566 1567 static HRESULT WINAPI IShellView_fnEnableModeless(IShellView * iface,BOOL fEnable) 1567 1568 { 1568 1569 1570 1571 1572 1569 ICOM_THIS(IShellViewImpl, iface); 1570 1571 FIXME("(%p) stub\n",This); 1572 1573 return E_NOTIMPL; 1573 1574 } 1574 1575 1575 1576 static HRESULT WINAPI IShellView_fnUIActivate(IShellView * iface,UINT uState) 1576 1577 { 1577 1578 ICOM_THIS(IShellViewImpl, iface); 1578 1579 1579 1580 /* 1580 CHARszName[MAX_PATH];1581 */ 1582 LRESULTlResult;1583 intnPartArray[1] = {-1};1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1581 CHAR szName[MAX_PATH]; 1582 */ 1583 LRESULT lResult; 1584 int nPartArray[1] = {-1}; 1585 1586 TRACE("(%p)->(state=%x) stub\n",This, uState); 1587 1588 /*don't do anything if the state isn't really changing*/ 1589 if(This->uState == uState) 1590 { 1591 return S_OK; 1592 } 1593 1594 /*OnActivate handles the menu merging and internal state*/ 1595 ShellView_OnActivate(This, uState); 1596 1597 /*only do This if we are active*/ 1598 if(uState != SVUIA_DEACTIVATE) 1599 { 1599 1600 1600 1601 /* 1601 1602 1603 */ 1604 1605 1606 1607 1608 1602 GetFolderPath is not a method of IShellFolder 1603 IShellFolder_GetFolderPath( This->pSFParent, szName, sizeof(szName) ); 1604 */ 1605 /* set the number of parts */ 1606 IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_STATUS, SB_SETPARTS, 1, 1607 (LPARAM)nPartArray, &lResult); 1608 1609 /* set the text for the parts */ 1609 1610 /* 1610 1611 1612 */ 1613 1614 1615 1611 IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_STATUS, SB_SETTEXTA, 1612 0, (LPARAM)szName, &lResult); 1613 */ 1614 } 1615 1616 return S_OK; 1616 1617 } 1617 1618 1618 1619 static HRESULT WINAPI IShellView_fnRefresh(IShellView * iface) 1619 1620 { 1620 1621 1622 1623 1624 1625 1626 1627 1621 ICOM_THIS(IShellViewImpl, iface); 1622 1623 TRACE("(%p)\n",This); 1624 1625 ListView_DeleteAllItems(This->hWndList); 1626 ShellView_FillList(This); 1627 1628 return S_OK; 1628 1629 } 1629 1630 1630 1631 static HRESULT WINAPI IShellView_fnCreateViewWindow( 1631 1632 1633 1634 1635 1636 1637 { 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 if ( SUCCEEDED (IShellBrowser_QueryInterface( This->pShellBrowser, 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 wc.style= CS_HREDRAW | CS_VREDRAW;1668 wc.lpfnWndProc= (WNDPROC) ShellView_WndProc;1669 wc.cbClsExtra= 0;1670 wc.cbWndExtra= 0;1671 wc.hInstance= shell32_hInstance;1672 wc.hIcon= 0;1673 wc.hCursor= LoadCursorA (0, IDC_ARROWA);1674 wc.hbrBackground= (HBRUSH) (COLOR_WINDOW + 1);1675 wc.lpszMenuName= NULL;1676 wc.lpszClassName= SV_CLASS_NAME;1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1632 IShellView * iface, 1633 IShellView *lpPrevView, 1634 LPCFOLDERSETTINGS lpfs, 1635 IShellBrowser * psb, 1636 RECT * prcView, 1637 HWND *phWnd) 1638 { 1639 ICOM_THIS(IShellViewImpl, iface); 1640 1641 WNDCLASSA wc; 1642 *phWnd = 0; 1643 1644 1645 TRACE("(%p)->(shlview=%p set=%p shlbrs=%p rec=%p hwnd=%p) incomplete\n",This, lpPrevView,lpfs, psb, prcView, phWnd); 1646 TRACE("-- vmode=%x flags=%x left=%i top=%i right=%i bottom=%i\n",lpfs->ViewMode, lpfs->fFlags ,prcView->left,prcView->top, prcView->right, prcView->bottom); 1647 1648 /*set up the member variables*/ 1649 This->pShellBrowser = psb; 1650 This->FolderSettings = *lpfs; 1651 1652 /*get our parent window*/ 1653 IShellBrowser_AddRef(This->pShellBrowser); 1654 IShellBrowser_GetWindow(This->pShellBrowser, &(This->hWndParent)); 1655 1656 /* try to get the ICommDlgBrowserInterface, adds a reference !!! */ 1657 This->pCommDlgBrowser=NULL; 1658 if ( SUCCEEDED (IShellBrowser_QueryInterface( This->pShellBrowser, 1659 (REFIID)&IID_ICommDlgBrowser, (LPVOID*) &This->pCommDlgBrowser))) 1660 { 1661 TRACE("-- CommDlgBrowser\n"); 1662 } 1663 1664 /*if our window class has not been registered, then do so*/ 1665 if(!GetClassInfoA(shell32_hInstance, SV_CLASS_NAME, &wc)) 1666 { 1667 ZeroMemory(&wc, sizeof(wc)); 1668 wc.style = CS_HREDRAW | CS_VREDRAW; 1669 wc.lpfnWndProc = (WNDPROC) ShellView_WndProc; 1670 wc.cbClsExtra = 0; 1671 wc.cbWndExtra = 0; 1672 wc.hInstance = shell32_hInstance; 1673 wc.hIcon = 0; 1674 wc.hCursor = LoadCursorA (0, IDC_ARROWA); 1675 wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); 1676 wc.lpszMenuName = NULL; 1677 wc.lpszClassName = SV_CLASS_NAME; 1678 1679 if(!RegisterClassA(&wc)) 1680 return E_FAIL; 1681 } 1682 1683 *phWnd = CreateWindowExA(0, 1684 SV_CLASS_NAME, 1685 NULL, 1686 WS_CHILD | WS_VISIBLE | WS_TABSTOP, 1687 prcView->left, 1688 prcView->top, 1689 prcView->right - prcView->left, 1690 prcView->bottom - prcView->top, 1691 This->hWndParent, 1692 0, 1693 shell32_hInstance, 1694 (LPVOID)This); 1695 1696 CheckToolbar(This); 1697 1698 if(!*phWnd) return E_FAIL; 1699 1700 return S_OK; 1700 1701 } 1701 1702 1702 1703 static HRESULT WINAPI IShellView_fnDestroyViewWindow(IShellView * iface) 1703 1704 { 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1705 ICOM_THIS(IShellViewImpl, iface); 1706 1707 TRACE("(%p)\n",This); 1708 1709 /*Make absolutely sure all our UI is cleaned up.*/ 1710 IShellView_UIActivate((IShellView*)This, SVUIA_DEACTIVATE); 1711 1712 if(This->hMenu) 1713 { 1714 DestroyMenu(This->hMenu); 1715 } 1716 1717 DestroyWindow(This->hWnd); 1718 IShellBrowser_Release(This->pShellBrowser); 1719 1720 return S_OK; 1720 1721 } 1721 1722 1722 1723 static HRESULT WINAPI IShellView_fnGetCurrentInfo(IShellView * iface, LPFOLDERSETTINGS lpfs) 1723 1724 { 1724 1725 1726 TRACE("(%p)->(%p) vmode=%x flags=%x\n",This, lpfs, 1727 1728 1729 1730 1731 1732 1725 ICOM_THIS(IShellViewImpl, iface); 1726 1727 TRACE("(%p)->(%p) vmode=%x flags=%x\n",This, lpfs, 1728 This->FolderSettings.ViewMode, This->FolderSettings.fFlags); 1729 1730 if (!lpfs) return E_INVALIDARG; 1731 1732 *lpfs = This->FolderSettings; 1733 return NOERROR; 1733 1734 } 1734 1735 1735 1736 static HRESULT WINAPI IShellView_fnAddPropertySheetPages(IShellView * iface, DWORD dwReserved,LPFNADDPROPSHEETPAGE lpfn, LPARAM lparam) 1736 1737 { 1737 1738 1739 1740 1741 1738 ICOM_THIS(IShellViewImpl, iface); 1739 1740 FIXME("(%p) stub\n",This); 1741 1742 return E_NOTIMPL; 1742 1743 } 1743 1744 1744 1745 static HRESULT WINAPI IShellView_fnSaveViewState(IShellView * iface) 1745 1746 { 1746 1747 1748 1749 1750 1747 ICOM_THIS(IShellViewImpl, iface); 1748 1749 FIXME("(%p) stub\n",This); 1750 1751 return S_OK; 1751 1752 } 1752 1753 1753 1754 static HRESULT WINAPI IShellView_fnSelectItem( 1754 1755 1756 1757 { 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1755 IShellView * iface, 1756 LPCITEMIDLIST pidl, 1757 UINT uFlags) 1758 { 1759 ICOM_THIS(IShellViewImpl, iface); 1760 int i; 1761 1762 TRACE("(%p)->(pidl=%p, 0x%08x) stub\n",This, pidl, uFlags); 1763 1764 i = LV_FindItemByPidl(This, pidl); 1765 1766 if (i != -1) 1767 { 1768 LVITEMA lvItem; 1769 1770 if(uFlags & SVSI_ENSUREVISIBLE) 1771 ListView_EnsureVisible(This->hWndList, i, 0); 1771 1772 1772 1773 ZeroMemory(&lvItem, sizeof(LVITEMA)); 1773 1774 1774 lvItem.mask = LVIF_STATE; 1775 lvItem.iItem = 0; 1775 1776 1776 1777 while(ListView_GetItemA(This->hWndList, &lvItem)) 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1778 { 1779 if (lvItem.iItem == i) 1780 { 1781 if (uFlags & SVSI_SELECT) 1782 lvItem.state |= LVIS_SELECTED; 1783 else 1784 lvItem.state &= ~LVIS_SELECTED; 1785 1786 if(uFlags & SVSI_FOCUSED) 1787 lvItem.state &= ~LVIS_FOCUSED; 1788 } 1789 else 1790 { 1791 if (uFlags & SVSI_DESELECTOTHERS) 1792 lvItem.state &= ~LVIS_SELECTED; 1793 } 1794 ListView_SetItemA(This->hWndList, &lvItem); 1795 lvItem.iItem++; 1796 } 1797 1798 1799 if(uFlags & SVSI_EDIT) 1800 ListView_EditLabelA(This->hWndList, i); 1801 1802 } 1803 return S_OK; 1803 1804 } 1804 1805 1805 1806 static HRESULT WINAPI IShellView_fnGetItemObject(IShellView * iface, UINT uItem, REFIID riid, LPVOID *ppvOut) 1806 1807 { 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1808 ICOM_THIS(IShellViewImpl, iface); 1809 1810 TRACE("(%p)->(uItem=0x%08x,\n\tIID=%s, ppv=%p)\n",This, uItem, debugstr_guid(riid), ppvOut); 1811 1812 *ppvOut = NULL; 1813 1814 switch(uItem) 1815 { 1816 case SVGIO_BACKGROUND: 1817 *ppvOut = ISvBgCm_Constructor(This->pSFParent); 1818 break; 1819 1820 case SVGIO_SELECTION: 1821 ShellView_GetSelections(This); 1822 IShellFolder_GetUIObjectOf(This->pSFParent, This->hWnd, This->cidl, This->apidl, riid, 0, ppvOut); 1823 break; 1824 } 1825 TRACE("-- (%p)->(interface=%p)\n",This, *ppvOut); 1826 1827 if(!*ppvOut) return E_OUTOFMEMORY; 1828 1829 return S_OK; 1829 1830 } 1830 1831 1831 1832 static HRESULT WINAPI IShellView_fnEditItem( 1832 1833 1834 { 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 } 1848 1849 static struct ICOM_VTABLE(IShellView) svvt = 1850 { 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1833 IShellView * iface, 1834 LPITEMIDLIST pidl) 1835 { 1836 ICOM_THIS(IShellViewImpl, iface); 1837 int i; 1838 1839 TRACE("(%p)->(pidl=%p)\n",This, pidl); 1840 1841 i = LV_FindItemByPidl(This, pidl); 1842 if (i != -1) 1843 { 1844 SetFocus(This->hWndList); 1845 ListView_EditLabelA(This->hWndList, i); 1846 } 1847 return S_OK; 1848 } 1849 1850 static struct ICOM_VTABLE(IShellView) svvt = 1851 { 1852 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE 1853 IShellView_fnQueryInterface, 1854 IShellView_fnAddRef, 1855 IShellView_fnRelease, 1856 IShellView_fnGetWindow, 1857 IShellView_fnContextSensitiveHelp, 1858 IShellView_fnTranslateAccelerator, 1859 IShellView_fnEnableModeless, 1860 IShellView_fnUIActivate, 1861 IShellView_fnRefresh, 1862 IShellView_fnCreateViewWindow, 1863 IShellView_fnDestroyViewWindow, 1864 IShellView_fnGetCurrentInfo, 1865 IShellView_fnAddPropertySheetPages, 1866 IShellView_fnSaveViewState, 1867 IShellView_fnSelectItem, 1868 IShellView_fnGetItemObject, 1869 IShellView_fnEditItem 1869 1870 }; 1870 1871 … … 1874 1875 */ 1875 1876 static HRESULT WINAPI ISVOleCmdTarget_QueryInterface( 1876 IOleCommandTarget *iface,1877 REFIIDiid,1878 LPVOID*ppvObj)1879 { 1880 1881 1882 1877 IOleCommandTarget * iface, 1878 REFIID iid, 1879 LPVOID* ppvObj) 1880 { 1881 _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface); 1882 1883 return IShellFolder_QueryInterface((IShellFolder*)This, iid, ppvObj); 1883 1884 } 1884 1885 … … 1887 1888 */ 1888 1889 static ULONG WINAPI ISVOleCmdTarget_AddRef( 1889 IOleCommandTarget *iface)1890 { 1891 1892 1893 1890 IOleCommandTarget * iface) 1891 { 1892 _ICOM_THIS_From_IOleCommandTarget(IShellFolder, iface); 1893 1894 return IShellFolder_AddRef((IShellFolder*)This); 1894 1895 } 1895 1896 … … 1898 1899 */ 1899 1900 static ULONG WINAPI ISVOleCmdTarget_Release( 1900 IOleCommandTarget *iface)1901 { 1902 1903 1904 1901 IOleCommandTarget * iface) 1902 { 1903 _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface); 1904 1905 return IShellFolder_Release((IShellFolder*)This); 1905 1906 } 1906 1907 … … 1909 1910 */ 1910 1911 static HRESULT WINAPI ISVOleCmdTarget_QueryStatus( 1911 1912 1913 ULONG cCmds, 1914 1915 1916 { 1917 1918 1919 1912 IOleCommandTarget *iface, 1913 const GUID* pguidCmdGroup, 1914 ULONG cCmds, 1915 OLECMD * prgCmds, 1916 OLECMDTEXT* pCmdText) 1917 { 1918 _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface); 1919 1920 FIXME("(%p)->(%p(%s) 0x%08lx %p %p\n", 1920 1921 This, pguidCmdGroup, debugstr_guid(pguidCmdGroup), cCmds, prgCmds, pCmdText); 1921 1922 return E_NOTIMPL; 1922 1923 } 1923 1924 … … 1928 1929 */ 1929 1930 static HRESULT WINAPI ISVOleCmdTarget_Exec( 1930 1931 1932 1933 1934 1935 1936 { 1937 1938 1939 1931 IOleCommandTarget *iface, 1932 const GUID* pguidCmdGroup, 1933 DWORD nCmdID, 1934 DWORD nCmdexecopt, 1935 VARIANT* pvaIn, 1936 VARIANT* pvaOut) 1937 { 1938 _ICOM_THIS_From_IOleCommandTarget(IShellViewImpl, iface); 1939 1940 FIXME("(%p)->(\n\tTarget GUID:%s Command:0x%08lx Opt:0x%08lx %p %p)\n", 1940 1941 This, debugstr_guid(pguidCmdGroup), nCmdID, nCmdexecopt, pvaIn, pvaOut); 1941 1942 } 1943 1944 static ICOM_VTABLE(IOleCommandTarget) ctvt = 1945 { 1946 1947 1948 1949 1950 1951 1942 return E_NOTIMPL; 1943 } 1944 1945 static ICOM_VTABLE(IOleCommandTarget) ctvt = 1946 { 1947 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE 1948 ISVOleCmdTarget_QueryInterface, 1949 ISVOleCmdTarget_AddRef, 1950 ISVOleCmdTarget_Release, 1951 ISVOleCmdTarget_QueryStatus, 1952 ISVOleCmdTarget_Exec 1952 1953 }; 1953 1954 … … 1957 1958 1958 1959 static HRESULT WINAPI ISVDropTarget_QueryInterface( 1959 1960 1961 1962 { 1963 1964 1965 1966 1967 1960 IDropTarget *iface, 1961 REFIID riid, 1962 LPVOID *ppvObj) 1963 { 1964 _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface); 1965 1966 TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj); 1967 1968 return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj); 1968 1969 } 1969 1970 1970 1971 static ULONG WINAPI ISVDropTarget_AddRef( IDropTarget *iface) 1971 1972 { 1972 1973 1974 1975 1976 1973 _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface); 1974 1975 TRACE("(%p)->(count=%lu)\n",This,This->ref); 1976 1977 return IShellFolder_AddRef((IShellFolder*)This); 1977 1978 } 1978 1979 1979 1980 static ULONG WINAPI ISVDropTarget_Release( IDropTarget *iface) 1980 1981 { 1981 1982 1983 1984 1985 1982 _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface); 1983 1984 TRACE("(%p)->(count=%lu)\n",This,This->ref); 1985 1986 return IShellFolder_Release((IShellFolder*)This); 1986 1987 } 1987 1988 1988 1989 static HRESULT WINAPI ISVDropTarget_DragEnter( 1989 IDropTarget*iface,1990 IDataObject*pDataObject,1991 DWORDgrfKeyState,1992 POINTLpt,1993 DWORD*pdwEffect)1994 { 1995 1996 1997 1998 1999 2000 1990 IDropTarget *iface, 1991 IDataObject *pDataObject, 1992 DWORD grfKeyState, 1993 POINTL pt, 1994 DWORD *pdwEffect) 1995 { 1996 1997 _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface); 1998 1999 FIXME("Stub: This=%p, DataObject=%p\n",This,pDataObject); 2000 2001 return E_NOTIMPL; 2001 2002 } 2002 2003 2003 2004 static HRESULT WINAPI ISVDropTarget_DragOver( 2004 IDropTarget*iface,2005 DWORDgrfKeyState,2006 POINTLpt,2007 DWORD*pdwEffect)2008 { 2009 2010 2011 2012 2013 2005 IDropTarget *iface, 2006 DWORD grfKeyState, 2007 POINTL pt, 2008 DWORD *pdwEffect) 2009 { 2010 _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface); 2011 2012 FIXME("Stub: This=%p\n",This); 2013 2014 return E_NOTIMPL; 2014 2015 } 2015 2016 2016 2017 static HRESULT WINAPI ISVDropTarget_DragLeave( 2017 IDropTarget*iface)2018 { 2019 2020 2021 2022 2023 2018 IDropTarget *iface) 2019 { 2020 _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface); 2021 2022 FIXME("Stub: This=%p\n",This); 2023 2024 return E_NOTIMPL; 2024 2025 } 2025 2026 2026 2027 static HRESULT WINAPI ISVDropTarget_Drop( 2027 IDropTarget*iface,2028 IDataObject*pDataObject,2029 DWORDgrfKeyState,2030 POINTLpt,2031 DWORD*pdwEffect)2032 { 2033 2034 2035 2036 2037 2038 } 2039 2040 static struct ICOM_VTABLE(IDropTarget) dtvt = 2041 { 2042 2043 2044 2045 2046 2047 2048 2049 2028 IDropTarget *iface, 2029 IDataObject* pDataObject, 2030 DWORD grfKeyState, 2031 POINTL pt, 2032 DWORD *pdwEffect) 2033 { 2034 _ICOM_THIS_From_IDropTarget(IShellViewImpl, iface); 2035 2036 FIXME("Stub: This=%p\n",This); 2037 2038 return E_NOTIMPL; 2039 } 2040 2041 static struct ICOM_VTABLE(IDropTarget) dtvt = 2042 { 2043 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE 2044 ISVDropTarget_QueryInterface, 2045 ISVDropTarget_AddRef, 2046 ISVDropTarget_Release, 2047 ISVDropTarget_DragEnter, 2048 ISVDropTarget_DragOver, 2049 ISVDropTarget_DragLeave, 2050 ISVDropTarget_Drop 2050 2051 }; 2051 2052 … … 2055 2056 2056 2057 static HRESULT WINAPI ISVDropSource_QueryInterface( 2057 2058 2059 2060 { 2061 2062 2063 2064 2065 2058 IDropSource *iface, 2059 REFIID riid, 2060 LPVOID *ppvObj) 2061 { 2062 _ICOM_THIS_From_IDropSource(IShellViewImpl, iface); 2063 2064 TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj); 2065 2066 return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj); 2066 2067 } 2067 2068 2068 2069 static ULONG WINAPI ISVDropSource_AddRef( IDropSource *iface) 2069 2070 { 2070 2071 2072 2073 2074 2071 _ICOM_THIS_From_IDropSource(IShellViewImpl, iface); 2072 2073 TRACE("(%p)->(count=%lu)\n",This,This->ref); 2074 2075 return IShellFolder_AddRef((IShellFolder*)This); 2075 2076 } 2076 2077 2077 2078 static ULONG WINAPI ISVDropSource_Release( IDropSource *iface) 2078 2079 { 2079 2080 2081 2082 2083 2080 _ICOM_THIS_From_IDropSource(IShellViewImpl, iface); 2081 2082 TRACE("(%p)->(count=%lu)\n",This,This->ref); 2083 2084 return IShellFolder_Release((IShellFolder*)This); 2084 2085 } 2085 2086 static HRESULT WINAPI ISVDropSource_QueryContinueDrag( 2086 2087 2088 2089 { 2090 2091 2092 2093 2094 2095 2096 2097 2098 2087 IDropSource *iface, 2088 BOOL fEscapePressed, 2089 DWORD grfKeyState) 2090 { 2091 _ICOM_THIS_From_IDropSource(IShellViewImpl, iface); 2092 TRACE("(%p)\n",This); 2093 2094 if (fEscapePressed) 2095 return DRAGDROP_S_CANCEL; 2096 else if (!(grfKeyState & MK_LBUTTON) && !(grfKeyState & MK_RBUTTON)) 2097 return DRAGDROP_S_DROP; 2098 else 2099 return NOERROR; 2099 2100 } 2100 2101 2101 2102 static HRESULT WINAPI ISVDropSource_GiveFeedback( 2102 2103 2104 { 2105 2106 2107 2108 2103 IDropSource *iface, 2104 DWORD dwEffect) 2105 { 2106 _ICOM_THIS_From_IDropSource(IShellViewImpl, iface); 2107 TRACE("(%p)\n",This); 2108 2109 return DRAGDROP_S_USEDEFAULTCURSORS; 2109 2110 } 2110 2111 2111 2112 static struct ICOM_VTABLE(IDropSource) dsvt = 2112 2113 { 2113 2114 2115 2116 2117 2118 2114 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE 2115 ISVDropSource_QueryInterface, 2116 ISVDropSource_AddRef, 2117 ISVDropSource_Release, 2118 ISVDropSource_QueryContinueDrag, 2119 ISVDropSource_GiveFeedback 2119 2120 }; 2120 2121 /********************************************************** … … 2123 2124 2124 2125 static HRESULT WINAPI ISVViewObject_QueryInterface( 2125 2126 2127 2128 { 2129 2130 2131 2132 2133 2126 IViewObject *iface, 2127 REFIID riid, 2128 LPVOID *ppvObj) 2129 { 2130 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface); 2131 2132 TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj); 2133 2134 return IShellFolder_QueryInterface((IShellFolder*)This, riid, ppvObj); 2134 2135 } 2135 2136 2136 2137 static ULONG WINAPI ISVViewObject_AddRef( IViewObject *iface) 2137 2138 { 2138 2139 2140 2141 2142 2139 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface); 2140 2141 TRACE("(%p)->(count=%lu)\n",This,This->ref); 2142 2143 return IShellFolder_AddRef((IShellFolder*)This); 2143 2144 } 2144 2145 2145 2146 static ULONG WINAPI ISVViewObject_Release( IViewObject *iface) 2146 2147 { 2147 2148 2149 2150 2151 2148 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface); 2149 2150 TRACE("(%p)->(count=%lu)\n",This,This->ref); 2151 2152 return IShellFolder_Release((IShellFolder*)This); 2152 2153 } 2153 2154 2154 2155 static HRESULT WINAPI ISVViewObject_Draw( 2155 IViewObject*iface,2156 2157 2158 2159 2160 2161 2162 2163 LPCRECTL lprcWBounds, 2164 2165 2166 { 2167 2168 2169 2170 2171 2172 2156 IViewObject *iface, 2157 DWORD dwDrawAspect, 2158 LONG lindex, 2159 void* pvAspect, 2160 DVTARGETDEVICE* ptd, 2161 HDC hdcTargetDev, 2162 HDC hdcDraw, 2163 LPCRECTL lprcBounds, 2164 LPCRECTL lprcWBounds, 2165 IVO_ContCallback pfnContinue, 2166 DWORD dwContinue) 2167 { 2168 2169 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface); 2170 2171 FIXME("Stub: This=%p\n",This); 2172 2173 return E_NOTIMPL; 2173 2174 } 2174 2175 static HRESULT WINAPI ISVViewObject_GetColorSet( 2175 IViewObject*iface,2176 2177 2178 2179 2180 2181 2182 { 2183 2184 2185 2186 2187 2188 2176 IViewObject *iface, 2177 DWORD dwDrawAspect, 2178 LONG lindex, 2179 void *pvAspect, 2180 DVTARGETDEVICE* ptd, 2181 HDC hicTargetDevice, 2182 LOGPALETTE** ppColorSet) 2183 { 2184 2185 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface); 2186 2187 FIXME("Stub: This=%p\n",This); 2188 2189 return E_NOTIMPL; 2189 2190 } 2190 2191 static HRESULT WINAPI ISVViewObject_Freeze( 2191 IViewObject*iface,2192 2193 2194 2195 2196 { 2197 2198 2199 2200 2201 2202 2192 IViewObject *iface, 2193 DWORD dwDrawAspect, 2194 LONG lindex, 2195 void* pvAspect, 2196 DWORD* pdwFreeze) 2197 { 2198 2199 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface); 2200 2201 FIXME("Stub: This=%p\n",This); 2202 2203 return E_NOTIMPL; 2203 2204 } 2204 2205 static HRESULT WINAPI ISVViewObject_Unfreeze( 2205 IViewObject*iface,2206 2207 { 2208 2209 2210 2211 2212 2213 2206 IViewObject *iface, 2207 DWORD dwFreeze) 2208 { 2209 2210 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface); 2211 2212 FIXME("Stub: This=%p\n",This); 2213 2214 return E_NOTIMPL; 2214 2215 } 2215 2216 static HRESULT WINAPI ISVViewObject_SetAdvise( 2216 IViewObject*iface,2217 2218 2219 2220 { 2221 2222 2223 2224 2225 2226 2217 IViewObject *iface, 2218 DWORD aspects, 2219 DWORD advf, 2220 IAdviseSink* pAdvSink) 2221 { 2222 2223 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface); 2224 2225 FIXME("Stub: This=%p\n",This); 2226 2227 return E_NOTIMPL; 2227 2228 } 2228 2229 static HRESULT WINAPI ISVViewObject_GetAdvise( 2229 IViewObject*iface,2230 2231 2232 2233 { 2234 2235 2236 2237 2238 2239 2240 } 2241 2242 2243 static struct ICOM_VTABLE(IViewObject) vovt = 2244 { 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2230 IViewObject *iface, 2231 DWORD* pAspects, 2232 DWORD* pAdvf, 2233 IAdviseSink** ppAdvSink) 2234 { 2235 2236 _ICOM_THIS_From_IViewObject(IShellViewImpl, iface); 2237 2238 FIXME("Stub: This=%p\n",This); 2239 2240 return E_NOTIMPL; 2241 } 2242 2243 2244 static struct ICOM_VTABLE(IViewObject) vovt = 2245 { 2246 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE 2247 ISVViewObject_QueryInterface, 2248 ISVViewObject_AddRef, 2249 ISVViewObject_Release, 2250 ISVViewObject_Draw, 2251 ISVViewObject_GetColorSet, 2252 ISVViewObject_Freeze, 2253 ISVViewObject_Unfreeze, 2254 ISVViewObject_SetAdvise, 2255 ISVViewObject_GetAdvise 2255 2256 }; 2256 2257
Note:
See TracChangeset
for help on using the changeset viewer.