C#扩展WebBrowser控件,使其支持拖放文件
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
public partial class UserControl1 : WebBrowser { private const int WmDropfiles = 0x233; [DllImport( "shell32.dll" )] private static extern uint DragQueryFile(IntPtr hDrop, uint iFile, StringBuilder lpszFile, uint cch); [DllImport( "shell32.dll" )] private static extern void DragAcceptFiles(IntPtr hWnd, bool fAccept); protected override void OnHandleCreated(EventArgs e) { base .OnHandleCreated(e); //指示接受文件拖放操作 if (!DesignMode) { DragAcceptFiles(Handle, true ); } } protected override void WndProc( ref Message m) { if (m.Msg == WmDropfiles) { #region 解析消息 //获取拖放的文件数量 var count = DragQueryFile(m.WParam, 0xffffffff, null , 0); //解析所有播放的文件路径 var filePaths = new string [count]; for ( uint i = 0; i < count; i++) { var sb = new StringBuilder(); DragQueryFile(m.WParam, i, sb, 1024); filePaths[i] = sb.ToString(); } #endregion //是否继续触发之后的消息处理 var isCancel = false ; #region 触发自定义文件拖放事件 if (DragFile != null ) { var args = new DragFileEventArgs(filePaths); DragFile( this , args); isCancel = args.IsCancel; } #endregion if (isCancel) return ; } base .WndProc( ref m); } public event EventHandler<DragFileEventArgs> DragFile; public class DragFileEventArgs : EventArgs { private readonly string [] _filePaths; public bool IsCancel { get ; set ; } public DragFileEventArgs( string [] filePaths) { _filePaths = filePaths; } public string [] FilePaths { get { return _filePaths; } } } } 该文章在 2021/2/8 17:07:23 编辑过 |
关键字查询
相关文章
正在查询... |