Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在WinForms中加速自定义渲染?_C#_.net_Winforms_Winapi_Gdi+ - Fatal编程技术网

C# 如何在WinForms中加速自定义渲染?

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

我在WinForms应用程序上工作,该应用程序需要实现拼写检查

要重新绘制表单,我正在使用Windows消息

    /// <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);
        }
    }