C# WndProc覆盖奇数消息,不正确
我正在查看发布的代码,特别是覆盖方法C# WndProc覆盖奇数消息,不正确,c#,windows,C#,Windows,我正在查看发布的代码,特别是覆盖方法WndProc中的SyntaxRichTextBox.cs 这只是代码中的一个输入错误吗?什么是windows消息0x00f?对于WM_PAINT,他们的意思是0x0f?捕获该消息的代码的作者是什么 代码: protected override void WndProc(ref System.Windows.Forms.Message m) { if (m.Msg == 0x00f) { if (m_bPaint)
WndProc
中的SyntaxRichTextBox.cs
这只是代码中的一个输入错误吗?什么是windows消息0x00f
?对于WM_PAINT
,他们的意思是0x0f
?捕获该消息的代码的作者是什么
代码:
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (m.Msg == 0x00f)
{
if (m_bPaint)
base.WndProc(ref m);
else
m.Result = IntPtr.Zero;
}
else
base.WndProc(ref m);
}
首先,正如James McNellis在上面的评论中所建议的,0x00f和0x0f表示相同的数字。我没有检查
WM_PAINT
message的值,但代码似乎正在处理此消息
它看起来像一个简单的优化:如果
m_bPaint
为false
,则跳过base.WndProc()
调用。可能m_bPaint
是一个标志,指示需要重新绘制某些内容。0x00f
和0x0f
是同一个数字。因此,它是用于WM_Paint消息的,为什么要在此代码中捕获该消息?(OP URL中的代码)似乎任何人都需要更多的证据,这是一个光辉的例子,说明了为什么在代码中使用幻数是个坏主意。如果存在public const int WM_PAINT=0x00f代码>,您不会感到困惑。正确的,特别是,当m_bPaint
设置为false
时,此代码可能会被注释为“忽略WM_Paint
消息”。我理解这一点。但是在OP中URL中的代码中,作者为什么要暂停绘制。他特别在流程线中设置了m_bPaint,该流程线选择线条的某些部分并高亮显示它们。为什么不想在高亮显示期间进行绘制?最好禁用代码块,看看会发生什么。但快速浏览代码表明程序员正在设置选项并更改选项颜色以进行语法高亮显示,并且不希望显示这些部分结果。事实上,的确,编写原始代码的人似乎不知道或不了解如何使用剪裁区域。