我正在尝试做到这一点,以便用户可以从只读的编辑框中选择文本,但他看不到闪烁的镜头。我已经能够使Caret从编辑中消失,但是仍然可以立即看到它。

这是我的子类的代码:

LRESULT CALLBACK UserInfoProc (HWND hUserInfoWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData)
{

    HideCaret(hUserInfoWnd);

    return DefSubclassProc(hUserInfoWnd, uMsg, wParam, lParam);

}

我知道这是一个适中的代码,但几乎可以做我想要的。

因此,发生的事情是,当我单击编辑时,可以立即看到Caret(50ms?)。我希望它根本没有出现。我怎样才能做到这一点?我希望用户仍然能够从编辑中选择文本。

有帮助吗?

解决方案

您可以尝试移动 HideCaret() 在此之后打电话 DefSubclassProc(), ,因为此刻,如果一条消息触发了脑的,那么直到 下一个 消息再次隐藏。

另外,我猜想触发出现的唯一信息是 WM_SETFOCUS, ,因此您可能只想测试该消息。例如,

LRESULT CALLBACK UserInfoProc (HWND hUserInfoWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData)
{
    LRESULT lRes = DefSubclassProc(hUserInfoWnd, uMsg, wParam, lParam);
    if (uMsg == WM_SETFOCUS) // maybe?
        HideCaret(hUserInfoWnd);
    return lRes;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top