-- 作者:admin
-- 发布时间:11/9/2004 2:26:00 AM
-- .Net框架下的Windows的底层访问
发信人: walts (小天堂), 信区: DotNET 标 题: .Net框架下的Windows的底层访问 发信站: BBS 水木清华站 (Tue May 15 13:03:03 2001) / *只是关于WinForm下的底层访问其他的还是要慢慢积累 .Net框架创建下的C#是一个目前真正的面向组件的编程语言。 而.Net框架提供的对于WinForm,MS在设计中为了达到使开发者 在使用时有在与使用WebForm编码是相同的舒适感。WinForm变得反而还 不如MFC更容易访问底层系统。但还是可以访问的,源自WinForm 下的每一个控件都有一个Handler的属性,允许访问空间的HWND, GDI+也提供类似的访问,此外控件具有一个虚拟的WinProc,可 以重载处理WinForm已经不再支持的消息。 --------------------------------------------- 下面是一本杂志上的一个很好的例子: 假如你的应用程序需要消耗许多资源,而C#的GC机制又有 滞后效应(具体的看MSDN,SDK),一般大家可以在重载一个 Dispose()来解决析构函数迟迟不调用的问题,其实还可以对 WM_COMPACTING作响应,当系统探测到内存紧张时WM_COPMACTING 将向所有顶级窗口广播。Win_Form框架没有内建对此消息的支持, 可以实现如下: public class CompactableForm:System.WinForms.Form{ private EventHandler handler; public void AddOnCompacting(EnventHandler h){ handler=(EventHandler)Delegete.Combine(handler,h); } public void RemoveOnCompacting(EventHandler h){ handler=(EventHandler)Delegate.Remove(handler,h); } protect override void OnCompacting(EventArg e){ //看看Runtime是否释放一些什么 System.GC.Collect(); //调用Add的那些消息处理函数 if(handler!=null) handler(this,e); } protect override void WndProc(ref Message m){ case (m.msg) { case Win_COMPACTING: OnCompacting(EventArgs.Empty); break; } base.WinProc(); } -- ※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.142.76] 上一篇 返回上一页 回到目录 回到页首
|