Você poderia tentar mover o HideCaret()
Ligue para depois do DefSubclassProc()
, pois no momento se uma mensagem aciona o cuidador, não será até próximo mensagem de que está escondido novamente.
Além disso, eu acho que a única mensagem que desencadeia o cuidador a ser mostrado é WM_SETFOCUS
, então você pode querer testar apenas essa mensagem. Por exemplo,
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;
}