发生意外的鼠标单击事件 .NET Compact Framework 3.5
Unexpected mouse click event occurs .NET Compact Framework 3.5
我是 c# .NET Compact Framework 3.5 的新手。
我正试图阻止急于排队的用户发生鼠标事件。这有时会导致意外点击。
在 .NET Compact Framework 平台上忽略排队的鼠标消息的最佳方法是什么?遗憾的是,代码必须在 UI 线程上 运行。
我试过:
1.禁用window和Application.DoEvents();然后 Enabled window --> 它没有用。
2. 我阅读了很多有关 PeekMessage() 的内容 --> 但无法理解。
请推荐我可以学习的资源
非常感谢。
像这样
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;
}
. . . . .
您可能需要在每个控制事件上执行此操作
感谢 Google 和其他人,我使用了 PeekMessage()..我会 post 一个代码(可能会对某些人有所帮助。)
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){ }}
那是……很酷吧……
另一个禁用触摸输入的选项是使用带有小 window(元素)的 TouchRegisterWindow 和 TouchUnregisterWindow。这可用于禁用当前对话框中的所有点击,而不必一一禁用所有元素。
详情见 http://www.hjgode.de/wp/2012/09/24/windows-mobile-disable-touch-input/
我是 c# .NET Compact Framework 3.5 的新手。
我正试图阻止急于排队的用户发生鼠标事件。这有时会导致意外点击。
在 .NET Compact Framework 平台上忽略排队的鼠标消息的最佳方法是什么?遗憾的是,代码必须在 UI 线程上 运行。
我试过: 1.禁用window和Application.DoEvents();然后 Enabled window --> 它没有用。 2. 我阅读了很多有关 PeekMessage() 的内容 --> 但无法理解。
请推荐我可以学习的资源
非常感谢。
像这样
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;
}
. . . . .
您可能需要在每个控制事件上执行此操作
感谢 Google 和其他人,我使用了 PeekMessage()..我会 post 一个代码(可能会对某些人有所帮助。)
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){ }}
那是……很酷吧……
另一个禁用触摸输入的选项是使用带有小 window(元素)的 TouchRegisterWindow 和 TouchUnregisterWindow。这可用于禁用当前对话框中的所有点击,而不必一一禁用所有元素。
详情见 http://www.hjgode.de/wp/2012/09/24/windows-mobile-disable-touch-input/