今天看TextOut等GUI相关的API函数,都没有能够实现高级类型的下划线的绘制?
请问有可能实现波浪线等其他类型的下划线吗?可以为下划线设置不同的颜色吗?
如何实现?

解决方案 »

  1.   

    即使能够,估计也很麻烦,用WORD对象处理吧
      

  2.   

    private sub popunder_click '设置文字的下划线
      if popunder.checked=flase then
     richtextbox1.selunderline=ture
     popunder.checked=ture
        else
     richtextbox1.selunderline=flase
     popunder.checked=flase
      end if
     end sub
      

  3.   

    楼上的,不是指的RichTextBox中的下划线哈,我是说通过API绘制文本输出到设备场景中
      

  4.   

    个人认为还是需要用基本样条来绘制的,至于位置的确定,这要看你使用什么方式去绘制文本。比较复杂的是多行文本,这恐怕也是楼主范难的地方,是使用DrawText或其他函数自动换行呢还是手工换行?
      

  5.   

    '绘制文本
        sText = IIf(mvarFormatString = "", mvarText, Format(mvarText, mvarFormatString))
        With tLF
            sFont = mvarFontName & vbNullString
            temp = StrConv(sFont, vbFromUnicode)
            For iChar = 0 To UBound(temp)
                .lfFaceName(iChar) = temp(iChar)
            Next iChar
            .lfItalic = mvarFontItalic
            .lfHeight = GetPixcelHeightByPoint(lhDC, mvarFontSize)
            .lfUnderline = mvarFontUnderline
            .lfWeight = IIf(mvarFontWeight = 0, IIf(mvarFontBold, 700, 400), mvarFontWeight)
            .lfStrikeOut = mvarFontStrikeout
            .lfQuality = IIf(oTable.FontQuality < 0, 0, oTable.FontQuality)
            .lfCharSet = DEFAULT_CHARSET
        End With
        hFnt = CreateFontIndirect(tLF) '创建字体
        '设置字体颜色
        If oTable.Enabled Then
            If mvarSelected = False Or oTable.HighlightMode <> HMFilledRectSolid Or (Not mvarPicture Is Nothing) Then
                SetTextColor lhDC, TranslateColor(mvarForeColor)
            Else
                SetTextColor lhDC, TranslateColor(IIf(oTable.InFocus, oTable.HighlightForeColor, NoFocusHighlightForeColor))
            End If
        Else
            SetTextColor lhDC, TranslateColor(vbGrayText)
        End If
        '选入指定字体,保存旧字体
        hFntOld = SelectObject(lhDC, hFnt)
        '绘制文本(单行文本非自动宽度时超宽显示省略号;多行文本非自动高度时超宽显示省略号)
    '    tR.bottom = tR.bottom     
        DrawText lhDC, sText, -1, tR, DT_NOPREFIX Or DT_EXPANDTABS Or DT_EDITCONTROL Or mvarVAlignment Or mvarHAlignment Or _
            IIf(mvarSingleLine, DT_SINGLELINE, DT_WORDBREAK) Or _
            IIf(mvarWordEllipsis, DT_WORD_ELLIPSIS, 0)
            
        '恢复旧字体
        SelectObject lhDC, hFntOld
        '释放临时字体
        DeleteObject hFnt