Chapter 8. Data Handlers
Data handlers allow you to define
custom handling for copy-and-paste operations involving files of a
given type. Normally, when you select a file and press Ctrl-C or
select Copy from the Explorer menu, the shell copies the name of the
file using the CF_HDROP format. This is evident in
the clsDropFiles class that we used to implement the
IShellExtInit::Initialize and
IDropTarget::Drop methods in Chapter 7. But what if we want to change this behavior
for our file type? Take a bitmap file for instance. What if, instead
of copying the file, we want to copy the actual image contained
within the file? Then you would be able to highlight the file in
Explorer and make it available to any program that knows how to
handle CF_BITMAP information (Microsoft Paint,
Adobe Photoshop, etc.). Or what if we want to copy information from
the file, say in CF_TEXT format, to the clipboard?
We might want to copy its dimensions, for example, or the color depth
of the file. This would allow us to select a file in the shell, press
Ctrl-C, and copy pertinent information directly from the file into
other programs like Microsoft Word or Excel.
Data handlers are required to implement two interfaces. These
interfaces are IPersistFile and
IDataObject. The IPersistFile
implementation serves the same purpose it did for our icon handler
and drop handler. We will just implement Load to
get the name of the file in question.
We have used
IDataObject before, but we have never implemented it. ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access