读书笔记:Control类的几个低级成员

  毋庸否认,.Net对Windows的底层细节封装还是做得不错的,同时,我们也能在必要的情况下访问到这些细节。

  句柄。用Windows API写过程序的人都知道,很多的函数都会需要一个句柄,句柄用于在Windows中唯一地标识某个对象(Windows对象,不是面向对象语言中的对象)。如果在.Net中需要使用某个暂时还不支持的特性的时候,一般是通过调用Windows API函数来完成的,而这些函数就有很多是需要一个句柄参数的。Control类的Handle属性可让我们获取到.Net控件的句柄(准确地说,应该是对应的Windows底层对象的句柄),使用句柄需要注意的一点就是:应当在需要使用的前一刻再获取,因为在.Net中某些特性的实现,是通过控件的销毁与重新创建来实现的,即使仅仅是更改了某个看起来无关紧要的属性。由于这个原因,我们获取到的句柄是有可能会变化的。

  消息。在.Net中,消息被封装,转换为更便于使用的事件。但在某些时候,一些消息并没有对应的事件,或许是.Net的设计者认为某个控件不需要关心这些消息,然而我们偏偏觉得我们需要,怎么办?通常是通过重载PreProcessMessage或WndProc方法来实现,也可以使用Application.AddMessageFilter方法来添加一个全局的消息过滤器。

  Control类的几个相关的低级成员:

  Handle,代表该控件的Windows句柄,IntPtr类型(实际上在32位计算机上就是一个32位的整数)。

  RecreatingHandle,控件在被重新创建的时候为true,没有可见的指示让用户察觉到变化正在发生,而且发生的时间很短,几乎是瞬间完成。

  GetStyle和SetStyle,获取或设置控件的style位标志,一般使用更高级的属性来完成。

  PreProcessMessage和WndProc,在.Net封装代码处理并将之转换为事件之前接收Windows消息。如果需要处理会被忽略的消息,或阻止控件接收某个消息,可以重载其中之一。

  ProcessKeyPreview和ProcessKeyMessage,允许你接收与控件的键盘处理相关的Windows消息。如果某个控件不提供KeyPress和KeyDown事件,而你又偏偏想获知击键动作,可以处理这些消息。

posted @ 2010-08-10 22:05  芥子-dancingbit  Views(327)  Comments(0)    收藏  举报