关于移动窗口的问题, 做了几天..也未做成...(0分)

  • 主题发起人 主题发起人 SuKiDelphi
  • 开始时间 开始时间
S

SuKiDelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
我想做一个程序(DELPHI的)...只想让我的主程序(有一张动图片..坐着的人)可以坐在前台窗口上的标题栏上.....

下面的得到前台窗口的代码(自已觉得下面的写法不好)...
var

OldHandle, NewHandle, MyThread : THandle;//定义一个句柄
MyThreadID : DWord;
ThreadEvent : Boolean = False;


function MyGetForegroundWindow(P : Pointer) : LongInt; stdcall;
var
buffer : array[0..255] of Char;
begin
repeat
NewHandle := GetForegroundWindow;
if NewHandle <> OldHandle then
begin
OldHandle := NewHandle;
坐上去(用 SetWindowPos 把自已的Form1...设为 TOPMOST...不改变活动窗口)
end;
until ThreadEvent;
end;


procedure Form1.FormCreate(Sender: TObject);
begin
// 不好啊...占用率太了点, 不过我没办法...
MyThread := CreateThread(nil, 0, @SetForegroundWindowTitle, nil, 0, MyThreadID);
end;

现在....当用户拖动前台窗口时...我的窗口也要一起拖动...
我试过用 Hook 来取 WM_MOVE后再处理我的窗口(要和前台窗口一起拖动)...

但水平不够......
 
用Hook技术实现吧。看看电脑爱好者以前的杂志以前的一期程序谷中有你一样的窗口小玩意的实现源代码,效果不错。
 
多谢....顶一下.....

function HookMsgProc(nCode, wParam, lParam : Integer): Integer;stdcall;
var
PCWP : PMSG;
begin
Result:=0;
if nCode = HC_ACTION then
begin
PCWP:=PMSG(lParam);
case PCWP.message of //就是这里不能正常接收 WM_MOVE
WM_MOVE: begin
ReleaseCapture;
SendMessage(FindWindow('Form2', nil), WM_SYSCOMMAND,

SC_MOVE + 1, 0);
end;
end;
end;
if nCode < 0 then
Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
end;
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部