[C#]使用SendMessage與EM_SETCUEBANNER為編輯框加上提示字串
Windows在XP與2003開始對單行編輯框支援顯示提示字串的功能,在Vista與2008以後下拉方塊也開始有了支援,多半這樣的功能被用在搜尋框上。像是Windows Live Mail、Windows 7等的搜尋框就是很好的例子。
為編輯框加上提示字串
要為編輯框加上提示字串,首先我們必須先了解EM_SETCUEBANNER訊息,該訊息是用來設定編輯框要用來顯示的提示字串,其隨之帶入SendMessage的兩個參數wParam與lParam分別簡述如下:
WParam
當編輯框獲得焦點時是否顯示提示字串
True=>當編輯框獲得焦點仍舊顯示提示字串
False=>當編輯框獲得焦點時提示字串就消失
要顯示的提示字串
對EM_SETCUEBANNER訊息的用法有了了解之後,使用SendMessage對編輯框發送EM_SETCUEBANNER訊息,並帶入對應的參數就可以了。就像下面這樣:
private static extern Int32 SendMessage(IntPtr hWnd, int msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);
...
const int EM_SETCUEBANNER = 0x1501;
...
SendMessage(this.Handle, EM_SETCUEBANNER, 0, "提示字串");
也可以整理成控制項重複使用:
{
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern Int32 SendMessage(IntPtr hWnd, int msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);
const int EM_SETCUEBANNER = 0x1501;
private string _cueText;
[Localizable(true)]
public string CueText
{
get
{
if (_cueText == null)
return string.Empty;
return _cueText;
}
set
{
_cueText = value;
updateCue();
}
}
private void updateCue()
{
SendMessage(this.Handle, EM_SETCUEBANNER, 0, CueText);
}
}
使用上只要放至表單,接著設置CueText屬性就可以了。
為下拉方塊加入提示字串
要為下拉方塊加上提示字串,首先我們必須先了解CB_SETCUEBANNER訊息,該訊息是用來設定下拉方塊要用來顯示的提示字串,其隨之帶入SendMessage的兩個參數wParam與lParam分別簡述如下:
wParam
必須為0
要顯示的提示字串
使用上一樣只要對下拉方塊發送CB_SETCUEBANNER訊息就可以了:
private static extern Int32 SendMessage(IntPtr hWnd, int msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);
...
const int CB_SETCUEBANNER = 0x1703;
...
SendMessage(this.Handle, CB_SETCUEBANNER0, "提示字串");