首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# MDI -在MDI超出界限时调整MDI大小后隐藏MDI滚动条

C# MDI -在MDI超出界限时调整MDI大小后隐藏MDI滚动条
EN

Stack Overflow用户
提问于 2012-04-04 17:31:06
回答 1查看 2K关注 0票数 0

我有一个MDI父母(Form1)和一个MDI子(Form2)。我目前已经禁用了Form1的滚动条,当Form2通过在Form2中放置以下代码而超出Form1的界限时:

代码语言:javascript
复制
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超出界限的位置,它将显示滚动条。

我怎样才能解决这个问题而不会发生这种情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-05 13:18:47

我为自己找到了一个可行的解决方案。在MDI表单(Form1)上。我使用以下代码。至少能帮上忙摆脱闪烁。

代码语言:javascript
复制
    [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;
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10016311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档