好象设borderstyle = bsnone无用,MDI子窗体还是有标题栏.听说CreateParams好象可以设,最好给个具体的例子.

解决方案 »

  1.   

    从FAQ中搜索出来的type  
       TMDIChild  =  class(TForm)  
       procedure  CreateParams(var  Params:  TCreateParams);  override;  
       ..........  
    implementation  
     
    {$R  *.dfm}  
     
    procedure  TMDIChild.CreateParams(var  Params:  TCreateParams);  
    begin  
     
       inherited  CreateParams(Params);  
       Params.Style  :=  Params.Style  and  not  WS_OVERLAPPEDWINDOW    or  WS_BORDER  
     
    end;
      

  2.   

    c++Builder是这样创建的,Delphi也差不多:windows在创建窗体时使用一个CreateWindowEx函数,通过传给这个函数的参数来确定窗口的样式。 
    而CreateParams虚函数是VCL在创建窗口之前调用的,用来取得要创建的窗口的样式的及其它一些相关属性的(Params参数),这里先通过调用TCustomForm的CreateParams函数来取得标准的窗口属性,再通过Params.Style^=WS_CAPTION;把窗口样式里的标题栏属性去掉,函数执行之后呢,VCL就把这个参数传给CreateWindowEx函数,这样创建的窗口就没有标题栏了。
    假如form1是主窗口,form2是一个子窗口。在form2的单元里加入一个函数: 
    void __fastcall TForm2::CreateParams(Controls::TCreateParams & Params) 

    //TODO: Add your source code here 
    TCustomForm::CreateParams(Params); 
    Params.Style^=WS_CAPTION; 
    } 头文件里这样加: 
    public: // User declarations virtual void __fastcall CreateParams(Controls::TCreateParams & Params); 就OK了,呵呵