C# 如何在WinForms中加速自定义渲染?
我在WinForms应用程序上工作,该应用程序需要实现拼写检查 要重新绘制表单,我正在使用Windows消息C# 如何在WinForms中加速自定义渲染?,c#,.net,winforms,winapi,gdi+,C#,.net,Winforms,Winapi,Gdi+,我在WinForms应用程序上工作,该应用程序需要实现拼写检查 要重新绘制表单,我正在使用Windows消息 /// <summary> /// Processes Windows messages. /// </summary> /// <param name="msg"> /// A Windows Message object. /// </param> protected overri
/// <summary>
/// Processes Windows messages.
/// </summary>
/// <param name="msg">
/// A Windows Message object.
/// </param>
protected override void WndProc(ref Message msg)
{
switch (msg.Msg)
{
case WM_PAINT:
Invalidate();
base.WndProc(ref msg);
if (IsSpellingAutoEnabled)
{
CustomPaint();
}
break;
...
default:
base.WndProc(ref msg);
break;
}
}
在UnderlineWords()中,使用以下代码绘制线:
private void DrawWave(Graphics bufferGraphics, Point startOfLine, Point endOfLine)
{
startOfLine.Y--;
endOfLine.Y--;
// kvv: Определяем цвет линий подчеркивания.
var pen = Pens.Red;
if ((endOfLine.X - startOfLine.X) >= 4)
{
var points = new ArrayList();
for (int i = startOfLine.X; i <= (endOfLine.X - 2); i += 4)
{
points.Add(new Point(i, startOfLine.Y));
points.Add(new Point(i + 2, startOfLine.Y + 2));
}
var p = (Point[])points.ToArray(typeof(Point));
bufferGraphics.DrawLines(pen, p);
}
}
private void DrawWave(图形缓冲区图形、点起始线、点内点)
{
startOfLine.Y--;
恩多弗林;
//kvv:。
var pen=Pens.Red;
如果((endOfLine.X-startOfLine.X)>=4)
{
var points=newarraylist();
for(int i=startOfLine.X;i如果我删除Invalidate()调用时,将不正确地重新绘制线条切换到使用Direct2D和字符符号。谢谢,但Direct2D不能在Windows XP下使用,因此此解决方案不合适。为什么不使用ControlStyles.UserPaint
创建一个普通控件来同时绘制文本和下划线?您的表单不能强调无论如何(你必须提供下划线部分
)。关于此代码的所有内容看起来都很慢;标题上写着加速;但当我们到达关键点时,你说它挂起。是慢还是挂起?[请不要在评论中回答:编辑你的答案,并添加其他说明。]
private void DrawWave(Graphics bufferGraphics, Point startOfLine, Point endOfLine)
{
startOfLine.Y--;
endOfLine.Y--;
// kvv: Определяем цвет линий подчеркивания.
var pen = Pens.Red;
if ((endOfLine.X - startOfLine.X) >= 4)
{
var points = new ArrayList();
for (int i = startOfLine.X; i <= (endOfLine.X - 2); i += 4)
{
points.Add(new Point(i, startOfLine.Y));
points.Add(new Point(i + 2, startOfLine.Y + 2));
}
var p = (Point[])points.ToArray(typeof(Point));
bufferGraphics.DrawLines(pen, p);
}
}