SendMessage vs. WndProc

Ich bin versucht zu verlängern TextBox - Steuerelement hinzufügen, Wasserzeichen-Funktionalität. Das Beispiel, das ich gefunden habe auf CodeProject ist unter Verwendung der importierten der SendMessage-Funktion.

[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");
}

Frage ich mich, warum nicht geschützt WndProc statt

void SetWatermark()
{
    var m =new Message() { HWnd = this.Handle, Msg = 0x1501, WParam = (IntPtr)0, LParam = Marshal.StringToHGlobalUni("Sample") };
    WndProc(ref m);
}

Beide scheinen gut zu funktionieren. Fast alle Beispiele, die ich gesehen habe, auf internet-Nutzung SendMessageFunktion. Warum ist das so? Nicht WndProc Funktion entwickelt, um zu ersetzen SendMessage?

P. S. ich weiß nicht Recht, zu konvertieren string zu IntPtr und festgestellt, dass Marshal.StringToHGlobalUni funktioniert ok. Ist es richtig Funktion, dies zu tun?

InformationsquelleAutor Poma | 2010-03-29
Schreibe einen Kommentar