.NET Compact Framework 3.5发生意外的鼠标单击事件

时间:2017-04-03 14:28:08

标签: c# .net compact-framework message-queue

我是c#.NET Compact Framework 3.5的新手。

我正在尝试阻止急切用户排队的鼠标事件。这有时会导致意外点击。

在.NET Compact Framework平台上忽略排队鼠标消息的最佳方法是什么?遗憾的是,代码必须在UI线程上运行。

我试过了: 1.禁用窗口和Application.DoEvents();然后启用窗口 - >那没起效。 我读了很多关于PeekMessage()的信息 - >但是想不出来。

请推荐我可以学习的资源。

非常感谢你。

3 个答案:

答案 0 :(得分:2)

感谢Google和其他人,我使用了PeekMessage()..我会发布一个代码(可能会帮助一些代码。)

    private const uint PM_REMOVE = 0x1;
    private const uint WM_MOUSEFIRST = 0x0200;
    private const uint WM_MOUSELAST = 0x0209;
    private const uint WM_QUIT = 0x0012;
    private struct Message
    {
        long hwnd;
        long message;
        long wParam;
        long lParam;
        long time;
        Point pt;
    }
    #if WindowsCE
    [DllImport("coredll.dll")]
    #else
    [DllImport("Kernel32.dll")]
    #endif
private extern static bool PeekMessage(out Message Msg, IntPtr hWnd, uint wMsgFilterMin, uint wMsgFilterMax, uint wRemoveMsg);
  public void ClearMouseClickQueue()
        {  Message msg;
    while (PeekMessage(out msg, IntPtr.Zero, WM_MOUSEFIRST,WM_MOUSELAST, 1) != false){ }} 

那是......很酷吧......

答案 1 :(得分:1)

像这样的东西

class MyForm : Form
{
    private bool _processing;

    private void OnMousedown(....) // really depends on what you use, 
        // Click/doubleclick/Up/down - concept is the same
    {
        if (_processing)
            return;
        _processing = true;
        // do something 
        . . . . . . 

        _processing = false;
     }
. . . . . 

您可能需要在每个控制事件

上执行此操作

答案 2 :(得分:1)

禁用触摸输入的另一个选项是使用带有小窗口(元素)的TouchRegisterWindow和TouchUnregisterWindow。这可用于禁用当前对话框中的所有点击,而无需逐个禁用所有元素。

http://www.hjgode.de/wp/2012/09/24/windows-mobile-disable-touch-input/

的详细信息
相关问题