CreateCaret

C# Signature:

[DllImport("user32.dll")]
static extern bool CreateCaret(IntPtr hWnd, IntPtr hBitmap, int nWidth,
   int nHeight);

VB.NET:

<DllImport("user32.dll", SetLastError:=True)> _
    Public Shared Function CreateCaret(ByVal hWnd As IntPtr, ByVal hBitmap As IntPtr, ByVal nWidth As Integer, ByVal nHeight As Integer) As Boolean
    End Function

Tips & Tricks:

int r = CursorColour.R ^ ParentControl.BackColor.R;
    int g = CursorColour.G ^ ParentControl.BackColor.G;
    int b = CursorColour.B ^ ParentControl.BackColor.B;

Sample Code:

private void button1_Click(object sender, System.EventArgs e) {
        CreateCaret(textBox1.Handle, IntPtr.Zero, 0, textBox1.Height);
        ShowCaret(textBox1.Handle);
    }

Sample Code:

<DllImport("user32.dll", SetLastError:=True)> 
    Public Shared Function CreateCaret(ByVal hWnd As IntPtr, ByVal hBitmap As IntPtr, ByVal nWidth As Integer, ByVal nHeight As Integer) As Boolean
    End Function

    Private Sub TextBox1_GotFocus(sender As Object, e As EventArgs) Handles TextBox1.GotFocus
    HideCaret(TextBox1.Handle)
    Dim bmPtr As IntPtr = GetHBitmap()
    CreateCaret(TextBox1.Handle, bmPtr, 2, 12)
    SetCaretBlinkTime(300)
    ShowCaret(TextBox1.Handle)
    End Sub

Sample Code:

The hBitmap parameter is a handle to the bitmap you want to use(or gray/solid).

    You can use the following to specify if you want gray/solid:

    Public Class hBMParameters
    Public Shared Property Gray As IntPtr = CType(1, IntPtr)
    Public Shared Property Solid As IntPtr = Nothing
    End Class

Sample Code:

Bitmaps have a method attached to return the handle

    Example:  
    Function GetHBitmap() As IntPtr
    Dim embeddedBitmap As Byte() = {137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 10, 0, 0, 0, 10, 8, 2, 0, 0, 0, 2, 80, 88, 234, 0, 0, 0, 1, 115, 82, 71, 66, 0, 174, 206, 28, 233, 0, 0, 0, 4, 103, 65, 77, 65, 0, 0, 177, 143, 11, 252, 97, 5, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 14, 195, 0, 0, 14, 195, 1, 199, 111, 168, 100, 0, 0, 0, 48, 73, 68, 65, 84, 40, 83, 99, 248, 143, 23, 16, 39, 205, 192, 128, 162, 14, 206, 165, 138, 225, 184, 0, 204, 14, 252, 118, 3, 249, 8, 33, 100, 54, 132, 2, 2, 136, 40, 4, 64, 133, 144, 165, 177, 128, 255, 255, 1, 57, 41, 7, 8, 21, 108, 65, 188, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130}
    Dim bm As Bitmap
    Using s As New System.IO.MemoryStream(embeddedBitmap)
        bm = CType(Bitmap.FromStream(s), Bitmap)
    End Using
    Return bm.GetHbitmap()
    End Function

Última actualización