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

C# 使用ctrl键滚动时禁用RichTextBox缩放,c#,winforms,richtextbox,C#,Winforms,Richtextbox,我在我的c#应用程序中使用RichTextBox,我想禁用RichTextBox在使用ctrl键滚动光标时的缩放,如何禁用此功能?请提供帮助。您可以使用鼠标滚轮命令和control.modifiers属性来控制应用程序的缩放 protected override void DefWndProc(ref Message m) { if (m.Msg == WM_MOUSEWHEEL && Control.ModifierKeys == Keys.Control) {

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

您可以使用鼠标滚轮命令和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);
    }
}
您可以覆盖自定义
RichTextBox
控件的属性并过滤消息。然后重新定义
wParam
内容值(该值报告当时按下的鼠标按钮组合),将其设置为
0
IntPtr.Zero
)。

然后,告知您已处理此消息,并返回
0
IntPtr.Zero
)的
m.Result

(请参阅
WM_鼠标滚轮
信息上的文档)。

要测试它,请创建一个新类并用此代码替换其内容(除了
名称空间
)。构建解决方案/项目。在工具箱中找到
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);
    }
}
或者,如果尚未重写WndProc,则可以重写,然后将其
MouseEventArgs
参数强制转换为,将其
Handled
属性设置为
true

protected override void OnMouseWheel(MouseEventArgs e)
{
    if ((ModifierKeys & Keys.Control) != 0) {
        ((HandledMouseEventArgs)e).Handled = true;
    }
    else {
        base.OnMouseWheel(e);
    }
}

为richtextbox内容大小调整事件创建事件处理程序。其中,类型

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

请提供您当前的研究如果有效,您可以在表单上保留原始RTB,从中派生,然后使用
AssignHandle()
,将RTB中的句柄分配给NativeWindow。