怎样在WPF中实现将桌面图标拖动到程序窗口中并显示其图标和文件名等文件信息。
bing “WPF drag and drop file”
■网友
没用过WPF,但是提供给你一个C版本的。
代码已经尽量加了注释,基本的窗口类跟绘制类不要在意。
流程基本是这样:
DragAcceptFiles 接受拖放文件
窗口响应WM_DROPFILES消息
DragQueryFile查询拖放的文件数量并且得到文件路径
SHGetFileInfo查询到对应文件的图标句柄
效果:
代码:、的代码编辑器好像有BUG一样。。复制过来的代码 代码编辑器直接不识别。
#include \u0026lt;stdio.h\u0026gt;
#include \u0026lt;stdlib.h\u0026gt;
#include \u0026lt;string.h\u0026gt;
#include \u0026lt;TCHAR.h\u0026gt;
#include \u0026lt;windows.h\u0026gt;
#include "Class_Windows.h"
#include "MemSketchpad.c"
#include "Class_Gdiplus_IMG.c"
Class_Windows_this_Ptr TestWindows;
MemSketchpad *TestMemSketchpad;
Class_Gdiplus_IMG *TestGdiplusIMG;
/*绘制文件路径跟图标*/
void DrawFilesPathAndIco(TCHAR *FilesPath){
\tSHFILEINFO Fileinfo;
\tSHGetFileInfo(FilesPath, 0, \u0026amp;Fileinfo, sizeof(Fileinfo), SHGFI_ICON); //获得文件信息
\tTestMemSketchpad -\u0026gt; Clear(TestMemSketchpad); //清空内存画板
\tTestMemSketchpad -\u0026gt; PositionWrite(TestMemSketchpad, 75, 25, FilesPath); //绘制文件路径
\tTestGdiplusIMG = New_Class_Gdiplus_IMG(); //实例化GDI+图片类
\tTestGdiplusIMG -\u0026gt; IMG_ICON(TestGdiplusIMG, Fileinfo.hIcon); //从ICON句柄创建GDI+图片 封装了 GdipCreateBitmapFromHICON 函数
\tDestroyIcon(Fileinfo.hIcon); //释放图标句柄
\tTestMemSketchpad -\u0026gt; Dw_IMG(TestMemSketchpad, TestGdiplusIMG -\u0026gt; GetWidth(TestGdiplusIMG), TestGdiplusIMG -\u0026gt; GetHeight(TestGdiplusIMG), TestGdiplusIMG -\u0026gt; GetHwnd(TestGdiplusIMG), 75, 75); //绘制图片到内存画板
\tTestMemSketchpad -\u0026gt; CopyToWindow(TestMemSketchpad, TestWindows -\u0026gt; GetHwnd(TestWindows)); //拷贝到窗口
}
/*收到拖放文件事件*/
void Event_Win_DropFiles(HWND Hwnd, UINT Msg, WPARAM Wparam, LPARAM lParam){
\tint FilesNums; //拖放的文件数量
\tTCHAR FilesPath = {0}; //获得文件路径缓冲区
\tHDROP Hdrop = (HDROP)Wparam;
\tFilesNums = DragQueryFile(Hdrop, 0xFFFFFFFF, NULL, 0); //获取拖放文件个数
\tfor (int i = 0; i \u0026lt; FilesNums; i ++){
\t\tDragQueryFile(Hdrop, i, FilesPath, sizeof(FilesPath)); //读取文件路径到缓冲区内
\t\tDrawFilesPathAndIco(FilesPath); //交给绘制子程序绘制文件路径跟图标出来
\t}
\tDragFinish(Hdrop);
}
/*窗口创建完毕事件*/
void Event_Win_Create(Class_Windows_this_Ptr this){
\tDragAcceptFiles(this -\u0026gt; GetHwnd(this), TRUE); //接受拖放文件
\tthis -\u0026gt; Add_Win_MsgProc_Ex(this, WM_DROPFILES, \u0026amp;Event_Win_DropFiles); //添加一个 响应WM_DROPFILES消息
\tTestMemSketchpad = New_MemSketchpad(); //实例化GDI内存画板
\tTestMemSketchpad -\u0026gt; Create(TestMemSketchpad, 600, 180, RGB(240, 240, 240)); //创建内存画板
}
/*入口函数*/
int main(){
\tTestWindows = New_Class_Windows(); //实例化窗口类
推荐阅读
- 聪明人养花,这3种“花”怎样也要养一盆,每年能省不少医药费
- 互联网怎样解决“家政服务上门速度慢”的问题
- 怎样看待从1月8号起,QQ钱包开始提现收费
- 银行it人怎样转型
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- 怎样进入通信行业
- 怎样评价扶他柠檬茶的小说《云养汉》的结尾
- 怎样成为一名合格的Python程序员?
- 怎样评价华为、诺基亚、中兴中标中国移动高端路由交换设备扩容集采
- 怎样评价类似前橙会、百老汇、南极圈这样类型的离职帮抱团,对企业的积极意义和消极意义
