Sto tentando di estendere il controllo TextBox
per aggiungere funzionalità di filigrana. L'esempio che ho trovato su CodeProject sta usando la funzione SendMessage importata.SendMessage 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");
}
mi chiedo perché non utilizzare protetto WndProc invece
void SetWatermark()
{
var m =new Message() { HWnd = this.Handle, Msg = 0x1501, WParam = (IntPtr)0, LParam = Marshal.StringToHGlobalUni("Sample") };
WndProc(ref m);
}
Entrambi sembrano funzionare bene. Quasi tutti gli esempi che ho visto su Internet utilizzano la funzione SendMessage
. Perché? La funzione non è WndProc
progettata per sostituire SendMessage
?
P.S. Non conosco il diritto di convertire string
in IntPtr
e ho trovato che Marshal.StringToHGlobalUni
funziona correttamente. È giusta la funzione per fare questo?