Sen döndürebilirsiniz senin WPF'nin bitmap döndürme yeteneği ile birlikte WinForms System.Drawing.Icon sınıfını kullanarak imleci.
Bunu yapmanın yolu, simgeyi yüklemek, bir BitmapSource'a dönüştürmek, Resim ve RenderTargetBitmap öğelerini döndürmek, bir simgeye geri dönüştürmek, kaydetmek ve son olarak 2, 10 ve 11 baytlarını güncellemek. .ico yerine bir .cur yapın. Eğer döngü kaçınmak istiyorsanız
public Cursor GetRotatedCursor(byte[] curFileBytes, double rotationAngle)
{
// Load as Bitmap, convert to BitmapSource
var origStream = new MemoryStream(curFileBytes);
var origBitmap = new System.Drawing.Icon(origStream).ToBitmap();
var origSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(origBitmap.GetHBitmap());
// Construct rotated image
var image = new Image
{
BitmapSource = origSource,
RenderTransform = new RotateTransform(rotationAngle)
};
// Render rotated image to RenderTargetBitmap
var width = origBitmap.Width;
var height = origBitmap.Height;
var resultSource = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
resultSource.Render(image);
// Convert to System.Drawing.Bitmap
var pixels = new int[width*height];
resultSource.CopyPixels(pixels, width, 0);
var resultBitmap = new System.Drawing.Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppPargb);
for(int y=0; y<height; y++)
for(int x=0; x<width; x++)
resultBitmap.SetPixel(x, y, Color.FromArgb(pixels[y*width+x]));
// Save to .ico format
var resultStream = new MemoryStream();
new System.Drawing.Icon(resultBitmap.GetHIcon()).Save(resultStream);
// Convert saved file into .cur format
resultStream.Seek(2); resultStream.WriteByte(curFileBytes, 2, 1);
resultStream.Seek(10); resultStream.WriteByte(curFileBytes, 10, 2);
resultStream.Seek(0);
// Construct Cursor
return new Cursor(resultStream);
}
, sen başlatma verilerini alır System.Drawing.Bitmap kurucusunu çağırmak için usafe küçük bir kod biraz değiştirebilirsiniz: Burada
kod gibi görünür : TextBox döndürme her değiştiğinde, bunu çağırmanız gerekir. Bu, TextBox'unuzu döndüren koddan veya TextBox'un rotasyonuna bağlı bir değerde bir PropertyChangedCallback öğesinden yapılabilir.
Belki ... "İmleç" kendi başına gerçek bir Kontrol olduğundan, diğer Kontrollerimi döndürdüğüm şekilde döndürülebilir. Hmmm, bunu deneyeceğim ve repertleyeceğim. –
Nup ... İşe yaramadı! Ahh! –
İmleç dediğinizde, fare imlecini kastediyorsunuzdur. I Beam veya bir sonraki karakterin nereye ekleneceğini/silineceğini göstermek için görüntülenen Caret'e atıfta bulunuyorsunuz. Sadece soruyorum, her ikisini de ima etmek için kullanılan kelime imlecini duyuyorum. Fare imlecini kastettiğini farzediyorum çünkü yanıp sönen piyano dönüyor, ama yine de istediğimi düşündüm. –