如何编程实现类似功能:当winamp运行时,其他windows程序界面的标题栏右上角都出现winamp的控制工具栏(100分)

  • 主题发起人 主题发起人 jyl
  • 开始时间 开始时间
Kingdeezj@sina.com

thanks.
 
用 ThemeEngine 3.2.0 这个,可以快速实现托盘功能
 
不好意思,,我刚刚才想到,不过现在都发了,,
 
我的思路:
1.使用定时器(缺点是比较占资源)
2.判断Windows当前活动窗体
3.得到该窗体的位置/大小
4.在适当的位置显示我们自已的窗体
以下是我的一个免费软件『Sonic Player』中的一段代码
下载地址:http://1000f.com/download/Sonic/Sonic4.exe
//--------------------------------------//
//定时判断Windows当前活动窗口位置
//如果当前为单行模式,就将窗口定位到Windows当前活动窗口的标题栏处
//这时必须将窗体设置为最顶,以免被其它窗体挡住
procedure TfrmMain.TimerTimer(Sender: TObject);
var
CurHandle: Hwnd;
WRect: TRect;
iX, iY, iR, iT: LongInt;
begin
if bSingle then //单窗体模式才有效
begin
if not bTop then
begin
bTop := True; //设置最顶
SetTop;
end;
//注意下面的代码
CurHandle := Windows.GetForegroundwindow; //当前Windows活动窗口的句柄
if CurHandle = Handle then Exit; //活动窗口是我自已的程序就不做
Windows.GetWindowRect(CurHandle, WRect); //得到Windows活动窗口的大小Rect
iT := WRect.Top;
iR := WRect.Right;
//下面计算我自已窗体的位置
//窗体左上角坐标
iX := iR - Width - iWRight;
iY := iT + iWTop;
if iT < iAreaWidth then //const iAreaWidth = 15; //周边敏感区域宽度
begin
iY := 0;
if iWRight < 55 then iX := iR - Width - 55;
end;
if Left <> iX then Left := iX;
if Top <> iY then Top := iY;
end;
end;
 
同意,不过好像是不是可能用SetParent这个东东呢
 
后退
顶部