如何使一个窗体总保持在紧贴桌面的位置。也就是最底层。(50分)

  • 主题发起人 主题发起人 回旋
  • 开始时间 开始时间

回旋

Unregistered / Unconfirmed
GUEST, unregistred user!
即使获得焦点也不能改变。
 
试试这个:  SetWindowPos(handle, HWND_Bottom{或NoTopMost}, 0,0,0,0,SWP_NoMove or SWP_NoSize or SWP_ShowWindow);
 
这个方法我已经试过了,不行,如果这个窗体获得焦点以后,它会自动前摆。
 
那就不让窗体获得焦点
 
用frame,然后windows.setparent(frame21.handle,0);把frame的父设为桌面。
 
SetWindowPos(handle, HWND_BOTTOM, Left, Top, Width, Height, 0);就可以阿,我试了<br>不过,要是有两个窗口的,在第二个窗口弹出的时候,让第一个窗口隐藏,让第二个窗口在最前端或是最后端显示就不行了?有谁知道!谢谢!
 
constructor TForm1.Create(AOwner: TComponent);<br>begin<br>&nbsp; &nbsp; &nbsp; &nbsp; inherited Create(AOwner);<br>&nbsp; &nbsp; &nbsp; &nbsp; ParentWindow := GetWindow(GetWindow(FindWindow(PChar('ProgMan'), nil), GW_CHILD), GW_CHILD);<br>end;<br>希望对你有帮助,我测试过没问题,但是------&gt;如果某些程序将自己设成ProgMan的子窗口,就can't work :(<br>这些天我也在研究这个问题,我的分都用完了55555所以借宝地问一下:---<br>---------怎样贴在桌面底层,而且--&gt;永远不会被最小化(也就是说用户按'显示桌面'也无法将其遮盖.谢谢:)<br><br>我发现很多老外的桌面小东东做到了,但csdn和大富翁上无解啊,期待中国的高手,期待~~~~~~~~~ 我自己研究了半年,晕,我太菜,取得了一些进展,但,唉,从实现难易度以及效率都无法和那些老外相提并论啊,郁闷中,都快对做程序没信心了[:(] 高手赐教~ 不胜感激~
 
我查了一下,资料上说桌面就是一个listview,可以往里面添加东东,不知能否这样实现[?]<br>谢谢~
 
其实本人已经讲过,关键是不让窗体获得焦点,实现也很简单,拦截鼠标消息并转发到其他窗口,也就是对所有鼠标消息都不进行处理而只是简单的转发,转发的目的是使它下面的窗口能获得控制(如果你的窗口置顶的话)
 
override createparams<br><br><br>PROCEDURE Tfly.createparams(VAR Params: TcreateParams);<br>BEGIN<br>&nbsp; INHERITED CreateParams(Params);<br>&nbsp; WITH params DO<br>&nbsp; BEGIN<br>&nbsp; &nbsp; Style := Style XOR WS_DLGFRAME;{让窗体有边框}<br>&nbsp; &nbsp; Exstyle := Exstyle OR WS_EX_TOOLWINDOW OR WS_EX_TOPMOST;{WS_EX_TOOLWINDOW:让窗体的任务栏按钮消失;WS_EX_TOPMOST:让窗体总在最前}<br>&nbsp; &nbsp; wndParent := 0;{缺少这句点击“显示桌面”浮动窗会消失}<br>&nbsp; END;<br>END;
 
后退
顶部