|
Pinned Windows
The shell can request Quick View to display a new file in the same window as
that used by the previous file viewer; that is, Quick View can "pin" a viewer
window. Quick View communicates the shell's request by sending a WM_DROPFILES message to the file viewer. The message contains an internal drop files
structure whose members include the path of the new file to be displayed. A file
viewer uses the same code to handle both the "pinned" state and drag and drop
operations in which the file viewer displays a file that the user has dragged and
dropped on the file viewer's window.
Quick View implements the IFileViewerSite interface, which allows a file viewer to retrieve the handle of the current
pinned window, if there is any, or set a new pinned window. When Quick View
calls a file viewer's IFileViewer::ShowInitialize member function, the file viewer receives the address of Quick View's IFileViewerSite interface. If the file viewer saves the address of the interface, it should
call the IFileViewerSite::AddRef member function to increment the reference count.
Only one pinned window can exist at a time. A file viewer uses the IFileViewerSite::SetPinnedWindow interface to set a new pinned window and the IFileViewerSite::GetPinnedWindow interface to retrieve the handle of the current pinned window.
When Quick View calls the file viewer's IFileViewer::Show member function, the file viewer receives the address of a FVSHOWINFO structure that includes a optional RECT structure. A valid RECT structure is a hint from the shell that the file viewer window should be
pinned; the file viewer should set the size and position of its window based on the
information in the structure.
If the file viewer window receives a WM_DROPFILES message, it should fill in the strNewFile member of the FVSHOWINFO structure with the path of the new file to be displayed, fill the rect member with the size and position of the viewer window, and set the
appropriate values in the dwFlags member. The file viewer should also fill the punkrel member with the address of an interface that the new file viewer should call
to release the previous file viewer. Doing this allows the previous file viewer
to perform cleanup operations. The new file viewer may be the same as the
current file viewer if the current one supports the new file. If the old file
viewer is the same as the new one, the release does not do anything because the
reference count is greater than zero.
If a file viewer returns a file but Quick View cannot find a viewer for the
new file, it calls the IFileViewer::Show member function for the old file viewer with the FVSIF_NEWFAILED value. The
file viewer can either terminate or continue showing the previous file.
Related Links
Software for Delphi and C++ Builder developers
Software for Visual Studio .NET developers
Software for Visual Basic 6 developers
Delphi Tips&Tricks
MegaDetailed.NET
TMS Scripter Studio Pro components for Delphi/C++Builder
More Online Helps
Win32 Multimedia Programmer's Reference (mmedia.hlp)
OLE Programmer's Reference (ole.hlp)
Microsoft Windows Pen API Programmer's Reference (penapi.hlp)
Microsoft Windows Sockets 2 Reference (sock2.hlp)
Microsoft Windows Telephony API (TAPI) Programmer's Reference (tapi.hlp)
Unix Manual Pages
|