如果你是Windows的老玩家,你可能注意到这么一件事:当拖动文件的时候,文件图标上会有一个细小的指示图标,可能图标的样子令人难以捉摸,一般会是一个小的方框,可能会有一个加号,或者箭头之类的,如果不是老司机,可能会被这些小图标搞蒙了。
让我们来改进改进如何?当我们拖动一个文件的图标时,我们需要添加一个拖动图片到我们的数据对象上(Data Object)上,如下图所示电脑:
电脑如上面你所看到的,我们制作一个崭新的函数GetDataObjectOfFileWithCuteIcon,它会创建一个数据对象,并将它挂接到一个漂亮的图标上,函数的实现代码如下图所示:
在上图中,我们使用了一个外壳拖动对象帮助对象来将一张图片挂接到一个数据对象上。帮助对象会要求数据对象能接受任意格式的二进制数据,幸运的是,标准的外壳数据对象满足这一要求。
比较讨厌的部分是如何生成这个拖动图片。实现这个功能,并不好玩,我向你保证。你也不会从下面这个函数代码中学到任何有用的东西,但是,我们不得不实现它,请看:
为了能够创建拖动图片,我们调用了SHGetFileInfo来返回图像列表(Image List)的句柄,以及文件的图标索引。图像列表中的图标大小将作为位图尺寸电脑和光标点被填充到SHDRAGIMAGE结构中。(我们将光标放在图像的右下角。)
由于我们正在创建一个Alpha混合位图,所以这里我们不需要颜色键。最后,我们创建一个内存DC来容纳我们在其中绘制图标的ARGB位图。
好了,一切准备就绪了。
现在,运行这个程序,当你在屏幕上拖动你的测试文件时,你应该会看到一个文本文件的图标。
在下一篇文章中,我们会改进程序,将这些复杂繁重的脏活交给另外一位兄弟来做。
下次我们需要显示自定义的拖动图标的时候,请回过头来,看看这篇文章,你一定会感谢自己。
美好的东西,不奏是一点一滴地慢慢积累优化而来的吗?
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Dragging a shell object, part 4: Adding a prettier drag icon》
电脑