Ich habe den folgenden CodeWie kann ich die IntPtr der Bitmap zu CreateCaret in C# passieren
Bitmap Bmp=new Bitmap(nWidth, nHeight);
using (Graphics gfx=Graphics.FromImage(Bmp)) {
using (SolidBrush brush=new SolidBrush(ForeColor)) {
gfx.FillRectangle(brush, 0, 0, nWidth, nHeight);
}
Bmp = new Bitmap(nWidth, nHeight, gfx);
CreateCaret(base.Handle, Bmp, nWidth, nHeight);
}
ShowCaret(base.Handle);
Das Problem Ich habe auf dieser Linie ist:
CreateCaret(base.Handle, Bmp, nWidth, nHeight);
... Weil es erwartet, dass Bmp IntPtr ist
Dieses Konzept Ich versuche, dies auf eine Weise zu tun, die nicht erfordert, ein Bitmap aus einer Datei oder Ressource, sondern mehr im laufenden Betrieb erstellt. Ich verstehe, dass ich IntPtr.Zero
überschreiten kann, und es wird ein Karat schaffen, aber die Farbe ist weg, wenn ich es so mache.
Wie kann ich die Bitmap wie erstellt an die CreateCaret
Methode übergeben?
Sie könnten an der 'Bitmap.LockBits' Methode aussehen wollen: https://msdn.microsoft.com/en-us/library/5ey6h79d(v=vs.100).aspx – vesan
Ich habe es gerade getan, habe ein 'Lock' nicht in dieser Methode oder so ähnlich beim. Glücklicherweise konnte ich eine Lösung 'CreateCaret (base.Handle, bmp.GetHbitmap(), nWidth, nHeight) finden;', eine Art Verrückter, dass MS eine Methode für die Konvertierung eingeführt hat, aber die Leute immer noch dumm sind, sie zu sperren/unlock/etc etc, um dasselbe zu tun, indem mehr Arbeitsspeicher und Ressourcen als benötigt verwendet werden. Schön, dass es einen direkten Weg gibt, um die Referenz des Objekts im Speicher nativ zu bekommen. –
Ich habe immer noch das Problem der Verfärbung, es zeigt sich jedoch als bräunliche Farbe, wenn ich 'ForeColor' auf GhostWhite gesetzt habe, und der Hintergrund der Richtextbox ist Slate, also braun? heh. –