使用ctrl键滚动时禁用RichTextBox缩放

时间:2018-08-06 07:22:38

标签: c# winforms richtextbox

我在c#应用程序中使用RichTextBox,我想在使用ctrl键滚动光标时禁用RichTextBox缩放,如何禁用此功能?请帮忙。

3 个答案:

答案 0 :(得分:1)

您可以覆盖自定义RichTextBox控件的WndProc并过滤WM_MOUSEWHEEL消息。然后重新定义wParam内容值(此值报告当时按下的鼠标按钮组合),并将其设置为0IntPtr.Zero)。

然后,让我们知道您已处理此消息,返回了m.Result0)中的IntPtr.Zero
(有关此信息,请参见WM_MOUSEWHEEL消息上的文档)。

要对其进行测试,请创建一个新的Class并将其内容替换为此代码(Namespace除外)。生成解决方案/项目。在您的工具箱中找到RTBNoZoom控件,并将其放在窗体上。

using System;
using System.Windows.Forms;

public class RTBNoZoom : RichTextBox
{
    private const int MK_CONTROL = 0x0008;
    private const int WM_MOUSEWHEEL = 0x020A;

    public RTBNoZoom() { }

    protected override void WndProc(ref Message m)
    {
        switch (m.Msg)
        {
            case WM_MOUSEWHEEL:
                if (((int)m.WParam & MK_CONTROL) == MK_CONTROL)
                {
                    m.WParam = IntPtr.Zero;
                    m.Result = IntPtr.Zero;
                }
                break;
            default:
                break;
        }
        base.WndProc(ref m);
    }
}

答案 1 :(得分:1)

为richtextbox ContentsResized 事件创建一个事件处理程序。其中,输入

private void richTextBox1_ContentsResized(object sender, ContentsResizedEventArgs e)
    {
        richTextBox1.ZoomFactor = 1.0f;
    }

答案 2 :(得分:-1)

您可以使用MOUSEWHEEL命令和control.modifiers属性来控制应用程序的缩放。

protected override void DefWndProc(ref Message m)
{
    if (m.Msg == WM_MOUSEWHEEL && Control.ModifierKeys == Keys.Control)
    {               
    // Do what you want here            
    }
    else
    {
    base.DefWndProc(ref m);
    }
}