【发布时间】:2021-02-15 18:01:16
【问题描述】:
我正在开发一个 .net windows 窗体控件,我使用下面的代码来修改自定义文本框中的插入符号
[DllImport("User32.dll")]
static extern bool CreateCaret(IntPtr hWnd, IntPtr hBitmap, int nWidth, int nHeight);
[DllImport("User32.dll")]
static extern bool SetCaretPos(int x, int y);
[DllImport("User32.dll")]
static extern bool DestroyCaret();
[DllImport("User32.dll")]
static extern bool ShowCaret(IntPtr hWnd);
[DllImport("User32.dll")]
static extern bool HideCaret(IntPtr hWnd);
[DllImport("user32.dll")]
static extern bool SetCaretBlinkTime(uint uMSeconds);
protected override void OnGotFocus(System.EventArgs e)
{
CreateCaret(this.Handle, IntPtr.Zero, 8, 14);
SetCaretPos(2, 1);
ShowCaret(this.Handle);
SetCaretBlinkTime(100);
base.OnGotFocus(e);
}
protected override void OnLostFocus(EventArgs e)
{
DestroyCaret();
base.OnLostFocus(e);
}
但我发现一旦我运行该项目,我的 windows 光标的闪烁率也发生了变化,直到我重新启动我的 windows xp (sp2)。
关于为什么会发生的任何建议?
【问题讨论】:
-
你读过SetCaretBlinkTime的备注部分吗?
-
谢谢jimi,但是你有解决办法吗?
-
如果已经阅读过文档中的注释,解决方法是不要拨打
SetCaretBlinkTime() -
再次感谢 jimi,你能建议我另一种方法来增加插入符号的闪烁时间吗?
-
Jimi 的意思是,根据文档的描述,应用程序应该尊重用户选择的设置。另外,即使你通过
OnGotFocus中的GetCaretBlinkTime和OnLostFocus中的SetCaretBlinkTime(pre_blink_time)得到pre_blink_time,也可能出现问题。然后你需要在控件中画一个插入符号,设置计时器并自己“闪烁”它。