询问者
About wm_touch消息获取不到

问题
-
目前正接触WIN7触摸编程,用c#语言开发 利用INT的GeoToolkit进行WINFORM编程,但是发现当加入INT的相关组件后WM_TOUCH消息就接受不到了,如果去掉其组件可以获得WM_TOUCH消息。
代码如下:
public partial class BaseMapView : UserControl{[DllImport("user32")]
public static extern bool RegisterTouchWindow(System.IntPtr hWnd, TouchWindowFlag flags);private cgSimplePlot viewPlot;private void BasemapView_Load(object sender, EventArgs e)
{RegisterTouchWindow( this.Handle,0);
viewPlot = baseMapViewController.CreateBaseMapPlot(this);
if (viewPlot != null)
{Control panel = CreatePanel(viewPlot);
this.Controls.Clear();
this.Controls.Add(panel); (去掉这个语句可以获取WM_TOUCH消息)
}}
//创建绘图控件
private Control CreatePanel(cgSimplePlot basemapPlot)
{
cgControlFactory factory = cgControlFactory.DefaultFactory;
Control panel = factory.CreateScrollableControl(basemapPlot).Control;
panel.Dock = DockStyle.Fill ;
panel.BackColor = Color.White;
return panel;
}}
所以不能明白 是加入INT组件后消息没有传递到该控件还是,加入INT组件后就没有产生WM_TOUCH消息?
WM_TOUCH消息的产生原理是什么,还请各位高手指教。
全部回复
-
Hi Payton,
这是因为你的panel填满了整个form,你的touch动作就发生在panel上的。
你可以将DockStyle设成不是 fill的值,然后设置下它的位置,和大小,使得它不会覆盖完整个form,然后你再touch没有panel的区域。你的form应该就可以再次接收到这个消息了。如果你想在panel里也接收到这个消息,那么你再调用RegisterTouchWindow API,然后第一个参数为panel的handle。
希望清楚了。
Mike Feng
MSDN Community Support | Feedback to us
Develop and promote your apps in Windows Store
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已编辑 Mike Feng 2013年5月5日 9:20
-
非常感谢,您说的方法我们尝试过,确实如果DockStyle不是设置成FILL是可以再其他位置获取到WM_TOUCH消息。现在是想在Panel里截获WM_TOUCH并进行处理,好像还是接受不到,尝试继承INT的其他组件如cgPlotPanel(MyControl继承该类),代码如下:
if (viewPlot != null)
{MyControl panel = new MyControl();
panel.Plot = viewPlot;RegisterTouchWindow(panel.Handle, 0);
this.Controls.Add(panel);}
在MyControl的窗口过程函数WndProc()中依然是获取不到WM_TOUCH消息,只能获取代号为641,7,8的消息,一直很纠结。
能方便提供下您的联系方式吗?QQ或者邮箱,不胜感激。
- 已编辑 payton2010 2013年5月7日 1:59
-
你好,
我们尽量论坛里交流吧,这样别人也能看到我们交流的过程,说不定这些交流的过程可以帮到其他人。
我建议你先 调用这个API看看panel是否接受这个消息:http://msdn.microsoft.com/en-us/library/windows/desktop/dd372998(v=vs.85).aspx
我初步怀疑这里不是直接用panel的handle,我手上目前没有触屏设备,暂时不能测试这个问题。
然后我建议你用英语这里发个新帖问问:http://social.msdn.microsoft.com/Forums/en-US/tabletandtouch/threads 这边是专门的touch类问题论坛。
谢谢。
Mike Feng
MSDN Community Support | Feedback to us
Develop and promote your apps in Windows Store
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已编辑 Mike Feng 2013年5月7日 14:44
- 已标记为答案 payton2010 2013年5月8日 0:12
- 取消答案标记 payton2010 2013年5月8日 0:13
-
好的 ,真的是非常感谢您。我试着用您给的API,调用IsTouchWindow(),测试返回的是TURE,该控件应该是支持触摸的。
- 已编辑 payton2010 2013年5月8日 0:47