1

我正在尝试使用户可以从只读编辑框中选择文本,但他不会看到闪烁的插入符号。我已经能够使插入符号从编辑中消失,但它仍然可以在瞬间看到。

这是我的子类代码:

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);

}

我知道,这是一段普通的代码,但它几乎可以满足我的要求。

那么会发生什么,当我单击编辑时,可以立即看到插入符号(50 毫秒?)。我希望它根本不出现。我怎样才能做到这一点?我希望用户仍然能够从编辑中选择文本。

4

1 回答 1

3

您可以尝试将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;
}
于 2013-11-08T00:47:11.110 回答