Winforms owner-drawn 控件和调整大小
Winforms owner-drawn controls and resizing
我正在设计一个名为 ViewPanel
的控件(如下)。本质上它只是一个面板,将 Text
属性 作为标题绘制。为此,我调整 DisplayRectangle
属性 以允许顶部有足够的 space 来绘制一些文本。
我遇到的问题(并且在很多 owner-drawn 操作 DisplayRectangle
的控件中遇到过)是当调整控件大小时,child 控件似乎有点落后
示例:
正如你在这里看到的,我有一个 ViewPanel
控件,它绘制了一个蓝色的标题栏,还要注意 ViewPanel
在每个方向都被填充了 16px!
ViewPanel
控件有一个 child (ListView
)
我已经调整了控件的大小 - 注意 ViewPanel
是如何正确绘制它的标题栏的,但是 child 没有相应地重新定位自己。
问题:
什么负责更新 child 控件的位置?我需要覆盖某些东西吗?
已解决(对于任何其他所有者绘图控件):
protected override void WndProc(ref Message m)
{
const int WM_WINDOWPOSCHANGED = 0x0047;
base.WndProc(ref m);
if (m.Msg == WM_WINDOWPOSCHANGED)
{
//Make changes to your display rectangle here...
this.PerformLayout();
}
}
我正在设计一个名为 ViewPanel
的控件(如下)。本质上它只是一个面板,将 Text
属性 作为标题绘制。为此,我调整 DisplayRectangle
属性 以允许顶部有足够的 space 来绘制一些文本。
我遇到的问题(并且在很多 owner-drawn 操作 DisplayRectangle
的控件中遇到过)是当调整控件大小时,child 控件似乎有点落后
示例:
正如你在这里看到的,我有一个 ViewPanel
控件,它绘制了一个蓝色的标题栏,还要注意 ViewPanel
在每个方向都被填充了 16px!
ViewPanel
控件有一个 child (ListView
)
我已经调整了控件的大小 - 注意 ViewPanel
是如何正确绘制它的标题栏的,但是 child 没有相应地重新定位自己。
问题:
什么负责更新 child 控件的位置?我需要覆盖某些东西吗?
已解决(对于任何其他所有者绘图控件):
protected override void WndProc(ref Message m)
{
const int WM_WINDOWPOSCHANGED = 0x0047;
base.WndProc(ref m);
if (m.Msg == WM_WINDOWPOSCHANGED)
{
//Make changes to your display rectangle here...
this.PerformLayout();
}
}