Domanda

Sto provando a farlo in modo che un utente possa selezionare il testo da una casella di modifica di sola lettura, ma non vedrà il cuscinetto lampeggiante. Sono stato in grado di far scomparire il custode dalla modifica, ma può ancora essere visto per un istante.

Questo è il mio codice per la sottoclasse:

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

}

È un po 'modesto di codice, lo so, ma quasi fa quello che voglio.

Quindi cosa succede è che quando faccio clic sulla modifica, il custode può essere visto per un istante (50 ms?). Voglio che non appaia affatto. Come posso fare questo? Voglio che l'utente sia ancora in grado di selezionare il testo dalla modifica.

È stato utile?

Soluzione

Potresti provare a spostare il HideCaret() chiamare dopo il DefSubclassProc(), poiché al momento se un messaggio innesca il custode non sarà fino al prossimo messaggio che è di nuovo nascosto.

Inoltre, immagino che l'unico messaggio che innesca il pugno da mostrare è WM_SETFOCUS, quindi potresti voler testare solo quel messaggio. Per esempio,

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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top