是高手的看过来!!!(100分)

  • 主题发起人 主题发起人 a_mao_gong
  • 开始时间 开始时间
A

a_mao_gong

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在想做一个可以自定义标题栏的窗口类,但不知道怎样把自定义的标题栏替换原来的那个。
注意:不是把原来的简单的去掉,而是要用具有完全功能自定义标题栏替换(包括菜单合并、缩放等功能。)
 
关注此题.
 
把窗体标题栏设为None
加一个Bar
让Bar 响应
Resize 消息处理标题栏的缩放
MouseMove 与MouseDown MouseUp 消息,处理窗口的拖动
Ok!
标题栏就已经替换掉了!
当然也不一定要用Bar 用 panel 也可以。
剩下的就是你自己怎么给标题栏加控件了!
 
Dark Angel的方法正是我现在用的方法,但问题是我想从底层把窗体的标题栏重画,不知道
能不能讲一讲实现的原理。
 
关注此题.
 
把窗口的boderstyle:= bsnone;
重载oncreate 事件中
写Tform(self).parent.boderstyle := bsnone;
 
public
{ Public declarations }
procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest;

...
implementation

procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
begin
inherited; { call the inherited message handler }
if M.Result = htClient then { is the click in the client area? }
M.Result := htCaption; { if so, make Windows think it's }
{ on the caption bar. }
end;
搞定
 
想从底层把窗体的标题栏重画不太可能吧,还是用Dark Angel的方法吧,我也是这么做的,功能都能实现
 
从底层重画也不是不可以,关键是要取得标题栏的窗口句柄。
我有看过一篇,但给忘了。
因为其复杂性与可定义性比起用Bar 或 Panel 来差了很多!
建议你不要钻牛角尖!
 
谢谢!也许你们是对的,而只是为了搞清“真相”
 
后退
顶部