- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
正如您可能从这篇文章的标题中了解到的那样,我快崩溃了。
好的,就是这样:我有一个 WPF 窗口,它承载着一个 WinForms 窗体,而窗体又承载着一个 ActiveX 控件。这都是由于遗留组件和想要为透明 WPF 窗口的不透明度设置动画。难道你还不能感受到乐趣吗?!
...所以,我希望能够通过在窗口的各个区域按下鼠标调用 DragMove 来拖动我的透明 WPF 窗口。这工作正常,我可以接受当前的行为,但如果我也可以通过我的 WinForms 组件生成的 MouseDown 事件拖动窗口,那就太好了。所以,我采取了显而易见的方法:
void Init()
{
MyWinForm form = new MyWinForm();
form.SomeControl.MouseDown = form_MouseDown;
}
void form_MouseDown( object sender, MouseEventArgs e )
{
if( e.Button == MouseButtons.Left )
{
DragMove();
}
}
但是,我的应用程序崩溃并显示以下消息:
Can only call DragMove when primary mouse button is down.
是的,正确的,除了左(主)按钮 是 被按下的按钮(我意识到这对于左撇子鼠标来说可能有问题,但我们暂时避免这种情况)。因此,对于 System.Windows.Forms.Control
,适用于 WPF 控件生成的鼠标事件的简单代码再次失败。有人对此有经验吗?提前感谢您提供的任何建议。
TLDR;从 System.Windows.Controls.MouseDown
事件内部调用 DragMove()
会使应用程序崩溃。此时我愿意接受任何解决方法。
最佳答案
查看使用反射器的 DragMove()
代码,我得出了这个解决方案:我们可以编写或拥有 DragMove(IntPtr hWnd)
,它不执行按钮状态检查,但我们必须在 MouseDown
事件处理程序中显式释放鼠标捕获。
public static class Utility
{
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr h, int msg, IntPtr lp, IntPtr wp);
public static void DragMove(IntPtr hwnd)
{
const int WM_SYSCOMMAND = 0x112;
const int WM_LBUTTONUP = 0x202;
SendMessage(hwnd, WM_SYSCOMMAND, (IntPtr)0xf012, IntPtr.Zero);
SendMessage(hwnd, WM_LBUTTONUP, IntPtr.Zero, IntPtr.Zero);
}
}
稍微更改一下您的 MouseDown 处理程序:
void form_MouseDown( object sender, MouseEventArgs e )
{
if( e.Button == MouseButtons.Left )
{
// it is necessary to release mouse capture, so that
// WPF window will be able to capture mouse input
((Control)sender).Capture = false;
// use helper to acquire window handle
var helper = new System.Windows.Interop.WindowInteropHelper(
your_window_reference_goes_here);
Utility.DragMove(helper.Handle);
}
}
我没有用 ActiveX 控件测试它,但它可以与简单的 WinForms 控件一起使用,至少在 Win7 Ultimate x64 上托管在 WindowsFormsControlHost
中。
关于c# - WPF、WinForms、ActiveX 控件和我正在消失的理智(调用 DragMove() 以响应 WinForms 控件的 MouseDown 事件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5347875/
我创建了一个安装在客户端计算机上的 ActiveX 控件。现在我已经在 ActiveX 控件中进行了一些更改,现在希望更改的 ActiveX 应该在客户端计算机中自动更新。 我已将安装文件的版本从 1
我用 C# 创建了一个 com 组件,并使用 Regasm 注册了该组件。我现在可以通过使用 ActiveXObject(...) 在 IE 中使用它。然而,这只在我更改 IE 安全设置并允许运行
我以前做过,但我完全忘记了如何签署 activeX 控件? 最佳答案 Digital Signing for ActiveX Components (MSDN) 关于activex - 签署 Acti
我有一个多页网页流 (jsp)。用户完成大量工作后,我需要使用 activex 组件,如果机器上没有显示,用户会在顶部显示黄色条以接受组件,接受后页面将重新加载,用户必须重复所有操作工作,请注意页面已
背景 有一个由 VB 创建的旧 ActiveX 控件。我将此 ActiveX 控件添加到我的 Excel 工作簿并设置了一些属性。这些属性是在保存书籍时保存的。具体来说,它们在 VB 代码中使用 Pr
我有一个想要从 SAP 调用的自定义 ActiveX 控件。 在这种情况下我不能使用 PI,我还有什么其他选择? 最佳答案 看节目 SAPRDEMO_ACTIVEX_INTEGRATION 举个例子。
我的 .NET 程序中有 WebBrowser 控件。实际上使用哪个 .net 包装器(wpf 或 winforms)并不重要,因为它们都包装 ActiveX 组件“Microsoft Interne
我有一个正在注册多个 dll 的安装程序,需要知道这是否成功。 最佳答案 这似乎对我有用:http://www.nirsoft.net/utils/registered_dll_view.html 关
如何将 ActiveX 应用程序转换为 NPAPI 应用程序? 我找到的所有方法都是为 NPAPI 实现入口点和映射函数。 (NPP_GetEntryPoints...)除了使用 Framework
“ActiveX 控件——小程序构建 block ——可以用于创建分布式应用程序,这些应用程序可以通过 Web 浏览器在 Internet 上运行。示例包括用于收集数据、查看某些类型的文件和显示动画的
微软发布了 Edge 浏览器,该浏览器不支持 ActiveX。 我有一个应用程序需要从 Windows 注册表获取信息,因此我对 ActiveX 的替代方案有一些疑问: 有没有办法通过 Edge 或类
我正在使用现有的 SDK 编写一个附加组件,该 SDK 没有类似 webview 的组件,但允许使用 ActiveX 控件。 所以我想到的唯一想法是找到一个实现网络浏览器的 ActiveX 控件,或者
嗨,我有一个这样的 ActiveX: CMyActiveX 类: 公共(public) CComObjectRootEx... ... { HRESULT FinalContruct(){return
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 5年前关闭。 Improve this questi
我有一个放置在 IE 浏览器容器中的 ActiveX 控件。该控件创建另一个启用了 WS_POPUP 和 WS_LAYERED 属性的对话框窗口,以便能够使用 SetLayeredWindowAttr
几天前,我在 Internet Explorer 中搜索了一种无需打印对话框直接打印的方法,并找到了这个 solution . 在此解决方案中,使用 ActiveX 对象“Shell.Explorer
我在服务器端使用 ASP.NET,在客户端使用 JavaScript。 我正在尝试开发一些有助于用户进行故障排除的页面,我想知道是否有一种方法可以通过编程方式确定以下内容: 如果 ActiveX 在
在 Visual Studio 2008 中,我可以创建一个 MFC activex 项目,它提供了一个向导来创建单个 activex 控件。我现在想在这个项目中创建新控件。 我找不到任何方法来做到这
我正在尝试为一个简单的 hello world 消息框运行 activex 控件。 首先,我创建了类库,现在有了 dll,然后我创建了 HTML 页面并调用了 activeX 控件:
免责声明:我没有签署文件的经验,这是我第一次。 我们的网站有一个通配符 SSL 证书。现在我们要在我们的一个站点上托管一个 ActiveX 控件。当我尝试使用该证书对我的 cab 文件进行签名时,它会
我是一名优秀的程序员,十分优秀!