C# 在窗口外绘制(和控件)

C# 在窗口外绘制(和控件),c#,winforms,visual-studio-2008,window,drawing,C#,Winforms,Visual Studio 2008,Window,Drawing,我认为如果我使用图像,它将是最好的: 我需要我的控件可以作为datetimepicker日历在窗口外。我正在使用panelKalendar=newpaneldoublebuffer()然后在方法中:void panel kalendar_Paint(对象发送者,PaintEventArgs e)I绘制所有内容。但它的绘画窗口和下面的所有其他控制。我如何才能获得DateTimePicker中使用的“效果”?恐怕您无法通过表单的子控件(这就是您实际正在做的),因为它将被父(表单)边界截断 在我看来

我认为如果我使用图像,它将是最好的:


我需要我的控件可以作为datetimepicker日历在窗口外。我正在使用
panelKalendar=newpaneldoublebuffer()然后在方法中:
void panel kalendar_Paint(对象发送者,PaintEventArgs e)
I绘制所有内容。但它的绘画窗口和下面的所有其他控制。我如何才能获得DateTimePicker中使用的“效果”?

恐怕您无法通过
表单的子控件(这就是您实际正在做的),因为它将被父(
表单
)边界截断

在我看来,您可以尝试使用seprate
WidnowdForm
控件,该控件正好出现在
面板现在出现的位置


希望这有帮助。

组合框的下拉列表(也可能是日历控件的下拉面板)是桌面的子窗口。这也是您必须做的:将控件嵌套在一个无边界窗体中,并为该窗体指定一个空父窗体,以便它是一个顶级窗口,而不是应用程序窗口的子窗口


由于表单将是顶级窗口,因此需要在屏幕坐标中指定其位置,而不是在表单的本地坐标中指定。您可以使用
指向屏幕的
方法获取这些坐标。

您根本不需要子窗口!这就是问题所在,您需要一个顶级窗口@CodyGray,等等,我当然可能错了,但请向我解释一下:当我们说“桌面的子对象”时,我们不是指一个由空父对象创建的窗口吗?这和说顶层窗口不一样吗?这可能是一些人说的意思,但我不会这么解释。桌面的子窗口实际上是一个以桌面窗口为父窗口的窗口,例如一个顶级窗口,在该窗口上调用
SetParent
并指定桌面窗口。当您调用类似于
MessageBox
的东西来显示模式对话框时,这种情况将是致命的。好的,谢谢您的澄清。现在,您认为组合框的下拉列表是什么?它是桌面的子窗口,还是顶级窗口?混淆的可能是“
NULL
parent”的术语。如果调用
CreateWindow
(或
CreateWindowEx
)并为
hWndParent
参数指定
NULL
,则实际上并不是在创建一个自有窗口。这意味着“在没有所有者的情况下创建此窗口”。这是创建顶级窗口的方式。所有窗口都是桌面的后代,但这并不意味着它们是桌面的子窗口。可能的重复