मैं वॉटरमार्किंग कार्यक्षमता जोड़ने के लिए TextBox
नियंत्रण बढ़ाने की कोशिश कर रहा हूं। कोडप्रोजेक्ट पर जो उदाहरण मिला है वह आयातित SendMessage फ़ंक्शन का उपयोग कर रहा है।SendMessage बनाम WndProc
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, uint wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);
void SetWatermark()
{
SendMessage(this.Handle, 0x1501, 0, "Sample");
}
क्यों संरक्षित WndProc का उपयोग न मैं सोच रहा हूँ बजाय
void SetWatermark()
{
var m =new Message() { HWnd = this.Handle, Msg = 0x1501, WParam = (IntPtr)0, LParam = Marshal.StringToHGlobalUni("Sample") };
WndProc(ref m);
}
दोनों ठीक से काम करने लगते हैं। इंटरनेट पर उपयोग किए गए लगभग सभी उदाहरण SendMessage
फ़ंक्शन। ऐसा क्यों है? फ़ंक्शन SendMessage
को प्रतिस्थापित करने के लिए डिज़ाइन नहीं किया गया है?
पीएस मुझे string
को IntPtr
में परिवर्तित करने का अधिकार नहीं है और पाया कि Marshal.StringToHGlobalUni
ठीक काम करता है। क्या यह करने के लिए सही काम है?