我有一个MDI父母(Form1)和一个MDI子(Form2)。我目前已经禁用了Form1的滚动条,当Form2通过在Form2中放置以下代码而超出Form1的界限时:
protected override void WndProc(ref Message m)
{
const int WM_MOVE = 0x0003;
switch (m.Msg)
{
case WM_MOVE:
return;
default:
base.WndProc(ref m);
break;
}
}虽然Form1的滚动条不会显示当用户将Form2拖出Form2 1的界限时,Form2是否会超出界限。但是,如果用户将 Form1调整到Form2超出界限的位置,它将显示滚动条。
我怎样才能解决这个问题而不会发生这种情况?
发布于 2012-04-05 13:18:47
我为自己找到了一个可行的解决方案。在MDI表单(Form1)上。我使用以下代码。至少能帮上忙摆脱闪烁。
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern int ShowScrollBar(IntPtr hWnd, int wBar, int bShow);
protected override void WndProc(ref Message m)
{
const int WM_MOVE = 0x0003;
const int WM_ENTERSIZEMOVE = 0x0231;
const int WM_EXITSIZEMOVE = 0x0232;
const int SB_BOTH = 3;
switch (m.Msg)
{
// Use SuspendLayout() instead of having constant flickering on resize starting
case WM_ENTERSIZEMOVE:
this.SuspendLayout();
base.WndProc(ref m);
break;
// Do not forget to ResumeLayout() when resizing finished
case WM_EXITSIZEMOVE:
this.ResumeLayout();
base.WndProc(ref m);
break;
default:
ShowScrollBar(this.Handle, SB_BOTH, 0);
base.WndProc(ref m);
break;
}
}https://stackoverflow.com/questions/10016311
复制相似问题