【发布时间】:2020-12-31 20:46:54
【问题描述】:
我在我的 c# 应用程序中使用 RichTextBox,我想在使用 ctrl 键滚动光标时禁用 RichTextBox 缩放,如何禁用它?请帮忙。
【问题讨论】:
-
请提供您目前的研究
标签: c# winforms richtextbox
我在我的 c# 应用程序中使用 RichTextBox,我想在使用 ctrl 键滚动光标时禁用 RichTextBox 缩放,如何禁用它?请帮忙。
【问题讨论】:
标签: c# winforms richtextbox
您可以覆盖自定义RichTextBox 控件的WndProc 并过滤WM_MOUSEWHEEL 消息。然后重新定义wParam内容值(该值报告当时按下了哪个鼠标按钮组合),将其设置为0(IntPtr.Zero)。
然后,让您知道您已处理此消息,返回 m.Result 或 0 (IntPtr.Zero)。
(有关此问题,请参阅 WM_MOUSEWHEEL 消息中的文档)。
要对其进行测试,请创建一个新类并用此代码替换其内容(Namespace 除外)。构建解决方案/项目。在您的 ToolBox 中找到 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,则可以覆盖 OnMouseWheel,然后将其 MouseEventArgs 参数转换为 HandledMouseEventArgs,将其 Handled 属性设置为 true .
protected override void OnMouseWheel(MouseEventArgs e)
{
if ((ModifierKeys & Keys.Control) != 0) {
((HandledMouseEventArgs)e).Handled = true;
}
else {
base.OnMouseWheel(e);
}
}
【讨论】:
AssignHandle()、similar example here 将 RTB 中的句柄分配给 NativeWindow。跨度>
为richtextbox ContentsResized 事件创建一个事件处理程序。其中,输入
private void richTextBox1_ContentsResized(object sender, ContentsResizedEventArgs e)
{
richTextBox1.ZoomFactor = 1.0f;
}
【讨论】:
您可以使用 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);
}
}
【讨论】: