سؤال

أحاول أن أجعله حتى يتمكن المستخدم من تحديد نص من مربع تحرير القراءة فقط ، لكنه لن يرى الذبابة الوامضة. لقد تمكنت من جعل القطرات تختفي من التحرير ، ولكن لا يزال من الممكن رؤيته للحظة.

هذا هو الكود الخاص بي للفئة الفرعية:

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

}

إنه أمر متواضع من التعليمات البرمجية ، وأنا أعلم ، لكنه يفعل ما أريد تقريبًا.

فما الذي يحدث هو أنه عندما أنقر على التحرير ، يمكن رؤية القاعدة في لحظة (50 مللي ثانية؟). أريد أنه لا يظهر على الإطلاق. كيف يمكنني أن أفعل هذا؟ أريد أن يتمكن المستخدم من تحديد النص من التحرير.

هل كانت مفيدة؟

المحلول

يمكنك محاولة تحريك 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;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top