Filigran işlevlerini eklemek için TextBox
denetimini genişletmeye çalışıyorum. CodeProject üzerinde bulduğum örnek, içe aktarılan SendMessage işlevini kullanıyor. WndProc korumalı kullanmayın neden merak ediyorumSendMessage vs. 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");
}
yerine
void SetWatermark()
{
var m =new Message() { HWnd = this.Handle, Msg = 0x1501, WParam = (IntPtr)0, LParam = Marshal.StringToHGlobalUni("Sample") };
WndProc(ref m);
}
İkisi yarıyor gözüküyor. İnternette gördüğüm neredeyse tüm örnekler SendMessage
işlevini kullanıyor. Neden? SendMessage
'u değiştirmek için tasarlanmış WndProc
işlevi değil mi?
P.S. string
'u IntPtr
'a dönüştürmeyi doğru bilmiyorum ve Marshal.StringToHGlobalUni
'un işe yaramadığını öğrendim. Bunu yapmak doğru işlev midir?