C# 使用SetWindowPos隐藏窗口不隐藏组合框

C# 使用SetWindowPos隐藏窗口不隐藏组合框,c#,interop,C#,Interop,我试图用这行代码隐藏一个窗口 SetWindowPos(d, IntPtr.Zero, 0, 0, 0, 0, 0x0001 | 0x0002 | 0x0004 | 0x0010 | 0x0080); SetWindowPos方法是user32.dll中的方法 大多数情况下,它工作正常,但是如果在隐藏窗口时打开了组合框,则组合框列表仍然可见 我做错了什么?SetWindowsPos不会隐藏下拉列表,因为combobox的下拉列表不是combobox的子项,因此它不受SetWindowsPos的

我试图用这行代码隐藏一个窗口

SetWindowPos(d, IntPtr.Zero, 0, 0, 0, 0, 0x0001 | 0x0002 | 0x0004 | 0x0010 | 0x0080);
SetWindowPos方法是user32.dll中的方法 大多数情况下,它工作正常,但是如果在隐藏窗口时打开了组合框,则组合框列表仍然可见


我做错了什么?

SetWindowsPos不会隐藏下拉列表,因为combobox的下拉列表不是combobox的子项,因此它不受SetWindowsPos的影响

(您可能希望使用Spy++查看下拉列表的父级,该列表为空-这意味着桌面是它的父级,而combobox控件的父级是它所在的窗体)


为什么不使用Form.Hide()方法来正确隐藏窗口和组合框的下拉列表?

谢谢您的回答。我想我不能使用Form.Hide(),因为我试图隐藏的窗口不在托管代码中。哦,您从一开始就没有指定这个。在这种情况下,您应该通过互操作将Win32 API中的ShowWindow函数与SW_HIDE参数一起使用。非常感谢你!您知道我需要注意的SetWindowPos和ShowWindow的行为是否有任何差异吗?我没有注意到任何差异。我认为ShowWindow是一种更直接的方式来实现您想要的功能(隐藏窗口)。SetWindowPos更通用,我需要移动/调整窗口大小时使用它。我看到了这样一个事实,即您可以使用SetWindowPos参数的组合来隐藏窗口,这更像是一种副作用。