1

ユーザーが読み取り専用の編集ボックスからテキストを選択できるようにしようとしていますが、点滅するキャレットが表示されません。編集でキャレットを非表示にすることはできましたが、まだ一瞬見えます。

これはサブクラスの私のコードです:

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

}

これは控えめなコードですが、私が望んでいることはほとんど実行されます。

編集をクリックすると、キャレットが一瞬 (50ms?) 表示されます。絶対に出さないでほしい。これどうやってするの?ユーザーが編集からテキストを選択できるようにしたい。

4

1 に答える 1

3

メッセージがキャレットをトリガーした場合、次のメッセージまで再び非表示にならないため、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;
}
于 2013-11-08T00:47:11.110 に答える