顺便问一下他的Autodetected有什么用

解决方案 »

  1.   

    有两个类TXPMenu和TControlSubClass:
      Application.HookMainWindow(MainWindowHook);//XPMenu通过设置Application对象的消息挂钩挂上自己的函数
      MainWindowHook通过InitItems函数初始化所有没有子类化的Form.
      InitItems判断:
         1.如果控件有自绘属性,则设置这些控件的自绘事件.OnDrawItem和OnMeasureItem
         2.如果控件没有自绘属性,则借助TControlSubClass类,修改它的窗口过程,即子类化这个控件.
            with TControlSubClass.Create(self) do
              begin
                Control:=TControl(Comp);
                orgWindowProc:=Control.WindowProc;
                Control.WindowProc:=ControlSubClass;
                XPMenu:=self;
              end;
            在ControlSubClass消息过程,拦截ON_PAINT等影响控件绘制的消息,通过调用自定义的函数PaintControlXP来绘制控件.这是我原来分析的主要结果,你看看把Autodetected应该是,是否自动扫描控件把!
      

  2.   

    谢谢楼上的,我最初只是想改写xp控件,使form和他的所有组件能够适应不同的分辨率而不走样,已纪写好了,比较简单,过程在setactive中和inititems一起调用的,效果还算理想。这才发现xp的代码实现比较难理解 ..另外谁还有有关这个控件的心得,说来听听,肯定结贴,有价值就有分,不够再开帖子:)