我对Winforms的架构很感兴趣.我试图理解的一件事是事件处理.在一个方面,我们有一大堆的保护的On
-方法(OnPaint
,OnMouseDown
在等)Control
类.另一方面,我们有一个WndProc
功能.但是中间是什么?谁实际上称这些受保护的方法?
大多数开始作为Windows消息,或者投递到消息队列与PostMessage的(如WM_KEYDOWN =>的onkeydown,WM_LBUTTONDOWN => onmousedown事件),或者直接与SendMessage消息发送给窗口过程(如WM_ACTIVATE => OnActivate,WM_SHOWWINDOW =>的OnLoad) .
当Application.Run()消息循环调用GetMessage()并由Control.WndProc()处理时,将调度这些消息.其中基本上包含Message.Msg上的大型switch语句.从Control派生的类具有自己的WndProc()重写,以处理特定于它们包装的本机Windows控件的消息.像TreeView一样,TVN_SELCHANGING => OnBeforeSelect.
然后有一些由Winforms本身合成.从您的代码中分配一个属性,如AutoSize => OnAutoSizeChanged,BackColor => OnBackColorChanged,Parent => OnParentChanged.可能对其他控件产生副作用的属性类型.
还有一些是从Winforms构建在普通Windows消息之上的状态合成的,OnEnter,OnLeave,OnValidating,OnLayout符合该类别.
这涉及到大量的代码,但这是它的粗略轮廓.
归档时间: |
|
查看次数: |
67 次 |
最近记录: |