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
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
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
implementation serves the same purpose it did for our icon handler
and drop handler. We will just implement
get the name of the file in question.
We have used
IDataObject before, but we have never implemented it. ...