Frage

Ich versuche es zu erstellen, damit ein Benutzer Text aus einem schreibgeschützten Bearbeitungsfeld auswählen kann, aber er wird die blinkende Pflege nicht sehen. Ich konnte die Pflege aus der Bearbeitung verschwinden lassen, aber es ist immer noch für einen Augenblick zu sehen.

Dies ist mein Code für die Unterklasse:

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

}

Ich weiß, es ist ein bescheidener Code, aber es tut fast das, was ich will.

Was passiert also, dass beim Klicken auf die Bearbeitung die Pflege für einen Augenblick (50 ms?) Zu sehen ist. Ich möchte, dass es überhaupt nicht erscheint. Wie kann ich das machen? Ich möchte, dass der Benutzer den Text noch aus der Bearbeitung auswählen kann.

War es hilfreich?

Lösung

Sie könnten versuchen, das zu bewegen HideCaret() Rufen Sie nach dem an DefSubclassProc(), da im Moment, wenn eine Nachricht die Pflege auslöst nächste Nachricht, dass es wieder versteckt ist.

Ich würde auch vermuten, dass die einzige Nachricht, die die zu zeigen, die Pflege auslöst WM_SETFOCUS, Möglicherweise möchten Sie also nur für diese Nachricht testen. Zum Beispiel,

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top