워터 마크 기능을 추가하려면 TextBox
컨트롤을 확장하려고합니다. CodeProject에서 찾은 예제는 가져온 SendMessage 함수를 사용하고 있습니다. WndProc을 보호 사용하지 왜 궁금하네요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");
}
대신
void SetWatermark()
{
var m =new Message() { HWnd = this.Handle, Msg = 0x1501, WParam = (IntPtr)0, LParam = Marshal.StringToHGlobalUni("Sample") };
WndProc(ref m);
}
모두 잘 작동하는 것 같다. 인터넷에서 보았던 거의 모든 예는 SendMessage
기능을 사용합니다. 왜 그런가요? 을 대체하도록 설계된 기능이 WndProc
이 아닙니까?
P. string
을 IntPtr
으로 변환 할 수 있는지 알 수없고 Marshal.StringToHGlobalUni
이 작동하는 것으로 나타났습니다. 이것을하는 것이 올바른 기능입니까?