Question

J'essaie de faire en sorte qu'un utilisateur puisse sélectionner du texte dans une boîte d'édition en lecture seule, mais il ne verra pas le care-clignotement. J'ai pu faire disparaître le caret de l'édition, mais il peut toujours être vu pendant un instant.

Ceci est mon code pour la sous-classe:

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

}

C'est un peu de code modeste, je sais, mais ça fait presque ce que je veux.

Alors, que se passe-t-il que lorsque je clique sur l'édition, le caret peut être vu pendant un instant (50 ms?). Je veux que ça n'apparaît pas du tout. Comment puis-je faire ceci? Je veux que l'utilisateur puisse toujours sélectionner le texte dans l'édition.

Était-ce utile?

La solution

Vous pouvez essayer de déplacer le HideCaret() Appelez après le DefSubclassProc(), car pour le moment si un message déclenche le caret, ce ne sera pas avant le Suivant Message qu'il est à nouveau caché.

De plus, je suppose que le seul message qui déclenche le caret à afficher est WM_SETFOCUS, vous voudrez peut-être tester uniquement ce message. Par exemple,

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top