आप घुमा सकते हैं अपने WinForms से SystemFDing.Icon क्लास का उपयोग कर कर्सर WPF की बिटमैप रोटेशन क्षमता के साथ संयोजन में।
ऐसा करने का तरीका आइकन लोड करना है, इसे बिटमैप स्रोत में परिवर्तित करना है, इसे घुमाने के लिए छवि और रेंडरटाइटल बिटमैप का उपयोग करें, इसे वापस एक आइकन में परिवर्तित करें, इसे सहेजें, और आखिरकार बाइट 2, 10, और 11 अपडेट करें इसे एक .ico के बजाय एक .cur बनाओ।
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);
}
आप पाश से बचना चाहते हैं, तो आप इसे usafe कोड का एक छोटा सा System.Drawing.Bitmap निर्माता कि प्रारंभ डेटा लेता है कॉल करने के लिए के साथ की जगह ले सकता:
यहाँ कोड कैसा दिखाई देता है है :
fixed(int* bits = pixels)
{
resultBitmap = new System.Drawing.Bitmap(width, height, width, System.Drawing.Imaging.PixelFormat.Format32bppPargb, new IntPtr(bits));
}
आप इस हर बार कॉल करने के लिए अपने पाठ बॉक्स रोटेशन परिवर्तन की आवश्यकता होगी। यह उस कोड से किया जा सकता है जो आपके टेक्स्टबॉक्स को घुमाता है, या PropertyChangedCallback से टेक्स्टबॉक्स के घूर्णन के लिए बाध्य है।
शायद ... चूंकि "कर्सर" स्वयं एक वास्तविक नियंत्रण है, इसलिए इसे मेरे अन्य नियंत्रणों को घुमाए जाने के समान ही घुमाया जा सकता है। हमम, मैं कोशिश करूँगा और दोबारा पोस्ट करूंगा। –
नुप ... काम नहीं किया! अरे! –
जब आप कर्सर कहते हैं तो आपका मतलब माउस कर्सर यानी है। मैं बीम या क्या आप कैरेट को रेफर कर रहे हैं जो यह इंगित करने के लिए प्रदर्शित होता है कि अगला चरित्र कहां डाला जाएगा/हटाया जाएगा। मैं केवल इसलिए पूछता हूं क्योंकि दस में से प्रत्येक शब्द कर्सर को दोनों को इंगित करता था। मुझे लगता है कि आपका मतलब माउस कर्सर है क्योंकि ब्लिंकिंग कैरेट घुमाता है, लेकिन सोचा कि मैं वैसे भी पूछूंगा। –