我刚做完的一个项目,主体是windows form,使用C#开发,基于.NET2.0,里面使用了基于MFC的控件(treeview),大拿坏死出现了一个问题,就是用户点击这个treeview控件,然后使用键盘上的上下左右键进行导航的时候,发现这些键不能工作,使用spy++跟踪这个treeview的消息,发现可以接收到WM_KEYDOWN消息,一段时间找不到解决方案。
后来经过几天的研究,找到了一种解决方案:
首先实现 IMessageFilter 接口,然后保存一个指向treeview控件窗口句柄的指针treeHWnd。接着在整个应用程序的入口处调用
Application.AddMessageFilter(myMessageFilter); 这样我们就可以在PreFilterMessage函数里截获WM_KEYDOWN消息,手工把这个消息发给treeview,从而让上下左右键可以正常工作。
- /// <summary>
- /// message filter class
- /// </summary>
- public