怎样在C++ Builder中拖动没有标题栏的窗口(25分)

  • 主题发起人 主题发起人 热血
  • 开始时间 开始时间
给你两段delphi程序,你自己翻译成C++ Builder的吧:
方法1:
Unit Unit1;
InterfaceUses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;Type
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TmouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TshiftState; X,
Y: Integer);
Private
{ Private declarations }
public
{ Public declarations }
end;
var Form1: TForm1;
Ylx,yly:integer; //定义一个全局变量
Implementation
{$R *.DFM}
procedure TForm1.FormMouseDown(Sender: TObject; Button: TmouseButton;
Shift: TShiftState; X, Y: Integer);Begin Ylx:=x; //记录鼠标原来的坐标值 Yly:=y;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TshiftState; X,
Y: Integer);
Begin
If ssleft in shift then begin //按下鼠标左键拖动form1
form1.left:=form1.left+x-ylx;
form1.top:=form1.top+y-yly;
end;
end;
end.

方法2:
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); private { Private declarations }
public
procedure wm(var msg:Twmnchittest);message wm_nchittest;
end;

procedure TForm1.wm_nchittest(var msg: Twmnchittest);
begin
inherited;
msg.Result:=htcaption;
end;
 
热血太小气了耶
:-)
 
不是我小气,因为我觉得这个问题在DELPHI里面说过,但自己
不太懂DELPHI,所以我帖出来,让DELPHI和C++ Builder的高手
转换一下.
 
你的热血沸腾的不是地方,有时间多研究一下不就行了。

热血多了,就叫冲动了 :)
 
第二个方法不是很好,因为回出现双击的时候窗体最大化
的情况(除非你希望这样)。可以这样来修改:
处理窗体的OnMouseDown句柄,当mouse左键按下时,向
窗体发送一个wm_nchittest消息,参数就是htcaption
 
还是我自己翻译好的,开始发分吧
 
多人接受答案了。
 
后退
顶部