我正在努力使用户可以从只读编辑框中选择文本,但他不会看到闪烁的插入符号。我已经能够使编辑从编辑中消失,但它仍然可以立即看到。
这是我的子类代码:
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);
}
这是一个适度的代码,我知道,但它几乎可以做我想要的。
那么,当我点击编辑时,可以看到插入符号(50ms?)。我希望它根本不出现。我怎样才能做到这一点?我希望用户仍然可以从编辑中选择文本。
答案 0 :(得分:1)
您可以尝试将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;
}