我正在使用ManipulationDelta事件处理程序将简单的椭圆拖放到屏幕上的画布中.我正在使用在网上发布的标准方法.以下是我的活动处理程序中的代码: Ellipse dragableItem = sender as Ellipse; TranslateTransform translateTransform = dragableItem.RenderTransform as TranslateTransform; double newPosX = Canvas.GetLeft(dragableItem) + translateTransform.X + e.Delta.Translation.X; double newPosY = Canvas.GetTop(dragableItem) + translateTransform.Y + e.Delta.Translation.Y; if (!isCanvasBoundary(newPosX, TestCanvas.Actua
以下是关于 drag-and-drop 的编程技术问答
我有一个应用程序,该应用具有带有堆栈面板和堆栈视图的大网格.内部有乘以从页面下降的乘网.用户是否有可能拖放这些网格,以便它们位于不同的位置.他们应该能够向上或向下移动网格或乘以网格.如果每个网格的右上角都有一个按钮 谢谢您的任何帮助:) 解决方案 尝试使用网格上的保留事件来定义要移动对象. (您可以操纵背景颜色以显示网格现在可以移动). 然后,使用操纵事件将网格移动到围绕控件(操纵三角洲和操作结束).操作三角洲将为您提供X和Y域中的翻译.使用y翻译通过指定的翻译向上或向下移动对象.然后,可以使用ManipulationCompletempletected来定义网格已完成. 即 private void holdEvent(object sender, System.Windows.Input.GestureEventArgs e) { // Change the background of the exercise label
我一直在寻找拖放列表框,但是我想没有这样的默认控件.有点搜索给了我, Jason的博客他非常优雅地将其删除..在他写的代码中,有一个拖放和滴剂处理程序位于每个ListBoxItem的右端.您按处理程序上或向上或向下移动项目.我正在尝试在项目的长印刷机上实现相同的功能. 他使用的是一个基本上是画布的阻力拦截器,它位于列表框的顶部以捕获ListBoxItem操纵事件.如果我想要在列表框项目的保留事件上进行相同的操作,我该如何触发它? 这就是我将事件与阻力拦截器联系起来的方式. 我该如何称呼该操作在列表框项目的保存下开始?还是还有其他方法可以做到? this.dragInterceptor.ManipulationStarted += this.dragInterceptor_ManipulationStarted; this.dragInterceptor.ManipulationDelta += this.dragInterceptor_ManipulationDelta
我正在使用ManipulationDelta事件处理程序将简单的椭圆拖放到屏幕上的画布中.我正在使用在网上发布的标准方法.以下是我的活动处理程序中的代码: Ellipse dragableItem = sender as Ellipse; TranslateTransform translateTransform = dragableItem.RenderTransform as TranslateTransform; double newPosX = Canvas.GetLeft(dragableItem) + translateTransform.X + e.Delta.Translation.X; double newPosY = Canvas.GetTop(dragableItem) + translateTransform.Y + e.Delta.Translation.Y; if (!isCanvasBoundary(newPosX, TestCanvas.Actua
我使用C#Winforms进行了相当长的一段时间.在Windows 7发布之前,我实现了拖放功能.像魅力一样工作.但是,使用Windows 7时,它不起作用.该事件甚至没有触发. AllowDrop设置为true.当订阅DragEnter时,它在Windows 7(不确定Vista)中不被调用.但是在XP上它一直工作.该程序具有委员会特权. Windows 7与XP中的阻力下降有区别吗?不知道它是否相关,但我正在使用x64 解决方案 源和目标过程需要具有兼容的安全级别/特权.例如,如果您的源是资源管理器,并且它具有用户级别的特权,但是您的目标应用程序正在使用管理员(高架)级别的许可运行,则您将无法拖动并删除,因为这被视为安全问题,因为目标是目标.具有更高级别的特权. 其他解决方案 它称为UIPI,用户界面特权隔离.旨在防止输入注入的利用,这些程序的特权有限.它可以被禁用,您需要执行此操作: 修改清单,将元
我正在使用C#的Insturopt.dodragdrop()中的c#'drag drog drog drog.我使用图像列表和Imagelist_dragmove和朋友将半透明的图像移动,并使用鼠标跟踪. (请参阅此线程有关更多信息).当我的窗户外部 时,如何使图像符号跟踪鼠标?我仅在ondragover()中收到鼠标位置消息,并且只有当鼠标在我的一个窗口上方时才接收.阻力是我应用程序的另一个实例,我希望图像片整个过程,包括台式机.我想基本的问题是Dodragdrop运行了自己的小消息循环. Windows Explorer完成了此操作,因此我知道这是可能的.我想我可以启动一个线程以跟踪鼠标或编写自己的拖放消息循环,但我希望有一种更简单的方法. 解决方案 您无法在自己的窗户外面绘制.这样做的方法是更改鼠标光标.这就是给予额外事件可用的,将E.UsedeFaultCursor设置为false并设置Cursor.current. 只是为了让您了解这是什么样子,这是拖动
如果我将图像从Chrome(或Firefox)拖到桌面上,Windows Explorer(不是IE )可以保存文件. 但是,如果我尝试从System.Windows.Forms.IDataObject中获取位图,则没有可用于Chrome的位图数据(并且仅来自Firefox的DIB). 所以,当不可用IDataObject提供时,Explorer如何从Chrome/Firefox获得实际图像? Microsoft是否具有无证件功能,唯一可以用来提取图像数据的功能? 我知道如何通过URI或Filedrop tempfile获取图像(请参见下文).问题是"如何获取服务文件",就像Explorer一样. 有些要注意的事情: jpeg掉落到桌面上的桌面与所提供的桌面相同(MD5SUM),加上Exif数据也保留了,因此它不能将DIB(如果存在)转换为JPEG. 图像是在经过身份验证的会话后面的,因此Explorer无法通过URL获取文件. 两个浏览器都提供DragIma
我有在MS Windows上运行的WXPYTHON应用程序,我希望它支持Drag&Drow在其实例之间删除(因此用户将我的应用程序打开3次,并将数据从一个实例拖动到另一个实例). wxpython中简单的拖放drop list lising: 用户启动drag :源窗口包在wx.dataobject()中必要的数据创建新的wx.dropsource,设置其数据并调用dropsource.dodragdrop() 用户将数据删除到目标窗口:drop target呼叫库函数getData()将实际数据传输到其wx.dataobject实例,最后-DataObject.getData()解开实际数据. 我想拥有一些更复杂的拖放,这将使用户能够在下掉落后选择哪些数据. 我的梦想的场景: 用户启动Drag :只包装了源窗口的一些指针(某些功能或对象). 用户将数据删除到目标窗口:显示尼斯对话框,询问用户他选择的拖放模式(例如 - 仅拖动歌曲标题,或歌曲标题以及艺术家的
我在QT中捕获应用程序范围事件时遇到了一些困难. 我的目的是在某些GUI应用程序中捕获所有用户操作.当然,我已经覆盖了QApplication::notify处理程序,并处理了那里的不同类型的应用程序事件.这样的东西: bool CoolApplication::notify(QObject *obj, QEvent *e) { switch (e->type()) { case QEvent::MouseButtonPress: case QEvent::MouseButtonRelease: // Handle mouse break; case QEvent::Wheel: // Handle wheel break; case QEvent::KeyPress: case QEvent::KeyRelease: // Handle key
这个主题显然在这里一遍又一遍地被击中,但是现在我从我的角度出发了任何选项. OS: Windows XP SP3 所以,这是 drag and drop示例richedit 我在我的应用中使用: procedure TForm1.AcceptFiles( var msg : TMessage ); // or TWMDROPFILES const cnMaxFileNameLen = 255; var i, nCount : integer; acFileName : array [0..cnMaxFileNameLen] of char; begin // find out how many files we're accepting nCount := DragQueryFile( msg.WParam, // or msg.Drop $FFFFFFFF,
当我试图获得批处理脚本的提升权利时,当我发现两个相关时,问题 如何请求批处理文件中的管理员访问 我如何自动化我的批处理文件,以便如果需要,请从UAC管理员权利请求? li> ...这导致了部分作用的答案.由于某种原因,我遇到了命令行的问题,用于传递文件路径参数,其中包含VBS脚本中的空格,因此我试图将解决方案分解为3个部分,并集中在内部(VBS)步骤上,然后通过调用一个来添加最后一步.尽管在与VBS脚本相同的文件夹中,但从该VB的批处理都找不到.我发现拖放不是"那么简单的" 和,当使用.vbs而不是.bat或.exe时,它是不同的. 这是我的实际问题: 如果我将文件拖动并将其放在可执行文件(EXE)或批处理文件(BAT,CMD)上,则当前的工作目录由拖动项目的来源确定.它的目录设置为处理它的程序或脚本的工作目录. 如果我将文件放到VBS脚本上,则不同.在Windows 8.1 x64上,我观察到它是C:\Windows\System32,即使该参数位于与V
我正在处理的程序的功能之一是能够从其主窗口拖动对象并将其拖到Windows Explorer作为文件. 为此,我们覆盖COleDataSource::OnRenderGlobalData(),并且,当格式为CF_HDROP时,我们将每个对象保存为一个文件.当对象的数量很少时,这可以正常工作. 但是,由于我们现在正在努力支持企业级别的对象数量,因此当用户试图将大量对象从应用程序中拖动到Windows Explorer时,我们会看到巨大的延迟,有时会导致挂起或最终崩溃. 我的猜测是在发生这种情况,因为OnRenderGlobalData()被称为多次,当然,每当它必须循环穿过被拖动的对象并将其保存为文件时. 我正在研究覆盖OnRenderFileData()的想法,但是问题是它一次只处理一个文件. 当用户试图将许多对象拖到Windows Explorer上时,我可以采取任何措施加速我们的应用程序,最好是将保存环移到只有在实际下降发生时才可以执行一次的地方?
我知道有可能注册鼠标的注册全局挂钩移动,按钮,按钮单击,滚动等,但是我想知道是否有任何方法可以检测用户是否实际拖动使用全局挂钩的文件或文本(或其他内容). 似乎找不到任何东西. 解决方案 没有钩子,对不起. 其他解决方案 即使需要消息循环才能使其正常工作,也不会由Windows消息处理.经典com要求.开始在registerdragdrop()上阅读以查看管道. 值得注意的是,UAC的UIPI方面妨碍了您,您不能从非高级过程到高架过程. ChangeWindowsMessageFilter()是通常的解决方法,它对D+D不起作用.不知道解决方法. 其他解决方案 您可能必须使用全局钩将DLL注入每个运行过程,然后DLL可以在每个进程的导入表中手动重定向DoDragDrop()和SHDoDragDrop()函数.当调用重定向函数时,您可以拥有DLL,然后根据需要通知您的主应用.