Tôi đang cố gắng mở rộng TextBox
kiểm soát để thêm chức năng watermarking. Ví dụ tôi đã tìm thấy trên CodeProject là sử dụng chức năng SendMessage đã nhập.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");
}
Tôi đang tự hỏi tại sao không sử dụng được bảo vệ WndProc thay
void SetWatermark()
{
var m =new Message() { HWnd = this.Handle, Msg = 0x1501, WParam = (IntPtr)0, LParam = Marshal.StringToHGlobalUni("Sample") };
WndProc(ref m);
}
Cả hai dường như làm việc tốt. Hầu như tất cả các ví dụ tôi đã thấy trên internet sử dụng chức năng SendMessage
. Tại sao vậy? Chức năng WndProc
được thiết kế để thay thế SendMessage
?
P.S. Tôi không biết phải chuyển đổi string
thành IntPtr
và thấy rằng Marshal.StringToHGlobalUni
hoạt động tốt. Có đúng chức năng để làm điều này?