在C#winforms中,是否有一种方法可以显示在使用轨迹栏控件时显示的虚线焦点轮廓边框?
细节:这个轮廓看起来有点俗气,所以我只是为了不美观而拍摄美学。
谢谢,
亚当
答案 0 :(得分:16)
ShowFocusCues对我不起作用,但是这样做了:
internal class NoFocusTrackBar : System.Windows.Forms.TrackBar
{
[System.Runtime.InteropServices.DllImport("user32.dll")]
public extern static int SendMessage(IntPtr hWnd, uint msg, int wParam, int lParam);
private static int MakeParam(int loWord, int hiWord)
{
return (hiWord << 16) | (loWord & 0xffff);
}
protected override void OnGotFocus(EventArgs e)
{
base.OnGotFocus(e);
SendMessage(this.Handle, 0x0128, MakeParam(1, 0x1), 0);
}
}
请参阅有关WM_UPDATEUISTATE的文档,了解其工作原理(基本上发送一条消息,将愚蠢的东西从轨迹栏上移开,获得焦点)。
答案 1 :(得分:0)
我知道这是一个古老的问题,但如果有兴趣的话,这会更简单:
public class TrackBarWithoutFocus : TrackBar
{
private const int WM_SETFOCUS = 0x0007;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_SETFOCUS)
{
return;
}
base.WndProc(ref m);
}
}