MDI父窗体控件挡住子窗体的问题,用win API SetWindowPos()的方法来解决,向高手请教

在使用WinAPI的SetWindowPos方法将一个无边框MDI子窗体置于底层时遇到父窗体无法激活的问题。该方法能解决子窗体遮挡问题,但导致了新的挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 谁对win API 比较熟悉 帮我看一下这个:
        [DllImport("user32.dll")]
        private static extern int SetWindowPos(int hwnd, int hWndInsertAfter, int x, int y, int cx, int cy, int wFlags);
        private const int HWND_BOTTOM = -1;
        private const int SWP_SHOWWINDOW = 0x40;
SetWindowPos(SWP_SHOWWINDOW, HWND_BOTTOM, 0, 0, 500, 500, 0x40);

这个完成了使当前窗体位于底层显示,我是用于MDI窗体的(情况是这样,原本想在MDI窗体的父窗体上放一个PANLE 然后在PANLE上放一些按钮来调出子窗体,但是发现父窗体的PANLE总是要挡住子窗体的显示,后来没办法,只好把一个子窗体f1设置为不显示边框然后在这个子窗体f1上放PANLE,在PANLE上在放按钮来调用其它子窗体,这样做的确是可以了。但是有个问题就是这些子窗体包括f1都是平级关系,这样的话,当f1获取焦点时就会挡住其它子窗体其它子窗体就找不到了很是不爽,于是在网上找到了这个办法解决,这个办法的思路是当f1获取焦点时使其处于程序窗体的最底层。然后我把SetWindowPos(SWP_SHOWWINDOW, HWND_BOTTOM, 0, 0, 500, 500, 0x40);这一句放到了f1的激活事件中,试验了一下,果然不错,但是问题又来了,就是当所有子窗体包括f1退出时,父窗体无法激活了。。。)真要命,高手帮忙看看是什么问题,谢谢了,

 

我的环境:VS2008 C# .net2.0

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值