C# 使用ctrl键滚动时禁用RichTextBox缩放
我在我的c#应用程序中使用RichTextBox,我想禁用RichTextBox在使用ctrl键滚动光标时的缩放,如何禁用此功能?请提供帮助。您可以使用鼠标滚轮命令和control.modifiers属性来控制应用程序的缩放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) {
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。