垫底的窗口

pigpag 2003-07-14 11:59:26
我想做一个程序,其MDI的背景是一个IE,从而提供像ActiveDesktop一样的效果。我把WebBrowser放进一个窗口,怎样使这个窗口垫底?
(同志们,我现在已经放弃了,不过我觉得这样的界面是不是有必要发扬一下?)

要求:
1.不能明显闪烁,封杀直接用ZOrder。
2.我尝试SetWindowPos,子窗口好像不起作用。
3.不能GetFocus,但必须能操作(链接都打不开的话就没意义了,但一点“桌面”,前面窗口都变灰了不爽)
4.尝试去掉WS_ClipChildren,差不多要求都达到了,可是无法满足要求3。

我是个完美主义者,请不要嫌唠叨。题目较难,分数从重处理!
...全文
75 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
vilifone 2003-08-08
  • 打赏
  • 举报
回复
收到了,噼里啪啦兄..
谢谢
vilifone 2003-08-08
  • 打赏
  • 举报
回复
谢谢了,..
vilifone 2003-08-08
  • 打赏
  • 举报
回复
pigpag(噼里啪啦) ,你的那个播放图片带背景音乐的程序..
能不能发给我,我的MAIL:vilifone@163.com
pigpag 2003-08-08
  • 打赏
  • 举报
回复
非常感谢所有参与的同志,但是James0001的答案是很令我满意的。他使用的是子类处理法,的确满足的我的需要。
但是,还是要感谢其他所有的各位,谢谢你们的回答和ups。

非常感谢。希望大家更踊跃的解决问题,让CSDN越办越火。结帖!
CCL 2003-08-08
  • 打赏
  • 举报
回复
自己写个程序代替Explorer.exe不就结了
James0001 2003-08-07
  • 打赏
  • 举报
回复
已发送。
pigpag 2003-08-07
  • 打赏
  • 举报
回复
呵呵,我看看,谢谢:
pigpag@msn.com

一定要超短阿,你知道的,Hotmail才2M
James0001 2003-08-07
  • 打赏
  • 举报
回复
BTW, 代码超短 :)
James0001 2003-08-07
  • 打赏
  • 举报
回复
pigpag(噼里啪啦)
大家帮帮忙!有没有什么API可以让MDI子窗体永远置底?
--------------------------------------------------
刚才随便写了个演示程序,你要的话发给你。
pigpag 2003-08-06
  • 打赏
  • 举报
回复
大家帮帮忙!有没有什么API可以让MDI子窗体永远置底?
tangyang8061 2003-07-27
  • 打赏
  • 举报
回复
哦!
pigpag 2003-07-27
  • 打赏
  • 举报
回复
哪有什么意义呢?不就是一个全屏幕的ActiveDesktop了吗?
我对ActiveDesktop可是会操作的。问题是我要做我自己程序的Desktop。不放在MDI里面,不符合我的要求啊。
谢谢
tangyang8061 2003-07-27
  • 打赏
  • 举报
回复
我是说你可以用多个窗体,其中一个作为背景,始终最大化,设为最底。其他的可设到最前就可以了嘛!?不要用MDI结构。没看到吗?
tangyang8061 2003-07-26
  • 打赏
  • 举报
回复
pigpag(噼里啪啦) ,你好,我是说你可以用多个窗体,其中一个作为背景,始终最大化,设为最底。其他的可设到最前就可以了嘛!?

#If Win16 Then
Declare Sub SetWindowPos Lib "User" (ByVal hwnd As Integer, ByVal hWndInsertAfter As Integer, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer)
#Else
Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
#End If

注意:下面的参数是可以用or来同时使用的!看最后的例子。
关于参数值,打开\Microsoft Visual Studio\Common\Tools\Winapi下的WIN32API.TXT用搜索搜这些常数。用API Text Viewer是看不到常数值声明的。
'===================================
hWndInsertAfter - Long,窗口句柄。在窗口列表中,窗口hwnd会置于这个窗口句柄的后面。也可能选用下述值之一。
常用hWndInsertAfter参数(设前后顺序):
HWND_BOTTOM ' 将窗口置于窗口列表底部
HWND_TOP ' 将窗口置Z序列的顶,Z序列代表在分级结构中,窗口针对一个给定级别的窗口显示的顺序
HWND_TOPMOST ' 将窗口置于列表顶部,并位于任何最顶部窗口的前面
HWND_NOTOPMOST ' 将窗口置于列表顶部,并位于任何最顶部窗口的后面
'========================================
wFlags --------- Long,包含了旗标的一个整数.
wFlags参数:
SWP_DRAWFRAME ' 围绕窗口画一个框
SWP_HIDEWINDOW ' 隐藏窗口
SWP_NOACTIVATE ' 不激活窗口
SWP_NOMOVE ' 保持当前位置(x和y设定将被忽略)
SWP_NOREDRAW ' 窗口不自动重画
SWP_NOSIZE ' 保持当前大小(cx和cy会被忽略)
SWP_NOZORDER ' 保持窗口在列表的当前位置(hWndInsertAfter将被忽略)
SWP_SHOWWINDOW ' 显示窗口
SWP_FRAMECHANGED ' 强迫一条WM_NCCALCSIZE消息进入窗口,即使窗口的大小没有改变


'例子:
Private Sub Form_Resize()
SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
End Sub
pigpag 2003-07-26
  • 打赏
  • 举报
回复
就是因为给MDIChild设HWND_TOPMOST和HWND_BOTTOM都没有效果啊?
你自己试试看
pigpag 2003-07-25
  • 打赏
  • 举报
回复
楼上 tangyang8061(大保姆) 您好:
比如,我看见有SWP_BOTTOM吧,设了,没反应。
我给其他的子窗口设SWP_TOPMOST,也没反应啊。
如果不用MDI的话,我的“桌面”放在哪里呢?
tangyang8061 2003-07-25
  • 打赏
  • 举报
回复
楼主:"我尝试SetWindowPos,子窗口好像不起作用。"
我试了,起作用啊,在其他子窗体的Form_LostFocus中设底窗体位置最后。可惜底窗的所有控件也就不起作用了,呵呵。我想:
不要用mdi窗体,用多窗体,SetWindowPos完全好用。
tangyang8061 2003-07-24
  • 打赏
  • 举报
回复
窗口垫底是什么意思啊?能说明白一点吗?
MDI窗体里可以放置picbox,picbox当form不好吗?
tangyang8061 2003-07-24
  • 打赏
  • 举报
回复
用picbox不就行了么?
pigpag 2003-07-24
  • 打赏
  • 举报
回复
呜,好像不对。
真看不懂就算了……Thank you all the same。
加载更多回复(15)

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧