Вы можете попробовать перенести 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;
}