我正在尝试创建VScroll控件的子类并拦截WM_VSCROLL
消息以执行某些操作。在msdn和无数文章/论坛上,WM_VSCROLL
应该是0x115
,即使在windows头文件中也是如此。但是等待0x115
并没有带来什么。我意识到它会以0x2115
代替,即使this article正在将其用作0x2115
。任何理由/解释为什么它会以0x2115
而来?是因为它是WinForms控件吗?
由于
答案 0 :(得分:3)
是的,这在Windows GUI类库中非常标准,Winforms也不例外。在您的情况下,本机Windows控件ScrollBar会向其父级发送通知。毕竟,他们的目的是让他们的父母按照通知行事,而不是他们自己。或者换句话说,您希望父窗口滚动。
然而,这与控件类的概念不太相容,控件类的行为可以通过覆盖其消息处理和生成来修改。或者就此而言,.NET中的事件的概念,任何人都可以订阅Scroll事件,而不仅仅是父事件。
这样可以获得很多好处,但必须采取措施才能将WM_VSCROLL消息从父级返回到控件。这就是Winforms管道所需要的。它将消息发回,但改变消息编号以指示它是反射消息,而不是原始消息。它增加了0x2000。 Winforms源代码中(假)WM_REFLECT消息的值。