TextBox/RichTextBoxのキャレットのある行を取得

VisualBasic6用
TextBox/RichTextBoxのキャレットのある行を取得

Const EM_LINEFROMCHAR = &HC9
Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
        (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
' TextBox/RichTextBoxのキャレットのある行数を取得
'
' lngHWnd : TextBox/RichTextBox のウィンドウハンドル
'
' 戻り値 : 正常 - キャレットのある行
'          異常 - -1
'
Function GetCursorLine(ByVal lngHwnd As Long) As Long
    Dim lngN As Long
    lngN = SendMessage(lngHwnd, EM_LINEFROMCHAR, -1, 0)
    If lngN >= 0 Then
        GetCursorLine = lngN + 1
    Else
        GetCursorLine = lngN
    End If
End Function