Проблема отображения текста внутри EditBox после нажатия злосчастной клавиши CAPS LOCK из-за всплывающей подсказки

В чем заключается проблема:

  1. Вводим с включенным CAPS LOCKom логин в поле для логина
  2. Щелкаем по полю для пароля (в это время появляется уведомление)
  3. Нажимаем на любую клавишу -> текст полностью пропадает
  4. Наводя на неактивную часть окна, ЧАСТЬ текста возвращается, но текстовая каретка слетает

введите сюда описание изображения

bool switcher = false;
const int bufferSize = 200;
char textedit1[bufferSize], textedit2[bufferSize];

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
    case WM_COMMAND:
    {
        switch (LOWORD(wParam))
        {
        case 1: //  Когда нажимаем галочку...
        {
            //  Записываем содержимое текстовых полей 
            GetWindowText(Edit1, (LPTSTR)&textedit1[0], bufferSize);  //  Предварительный логин
            GetWindowText(Edit2, (LPTSTR)&textedit2[0], bufferSize);  //  Предварительный пароль          
            DestroyWindow(Edit1);
            DestroyWindow(Edit2);

            //  Переключение галочки
            if (!switcher)
                switcher = true;
            else
                switcher = false;
        }
        break;
    }   
    //  Динамическое изменение окна (отрисовка при изменениях)
    case WM_PAINT:
    {
        //  Текстовое поле для ввода логина
        DestroyWindow(Edit1);
        Edit1 = CreateWindow(L"edit", L"", WS_CHILD | WS_VISIBLE | WS_BORDER, 10, 230, 415, 35, hWnd, (HMENU)10000, hInstance, NULL);
        SendMessage(Edit1, WM_SETFONT, WPARAM(hFont1), WS_EX_CLIENTEDGE);
        SetWindowText(Edit1, (LPTSTR)&textedit1[0]);

        //  Текстовое поле для ввода пароля 
        if (switcher == false)   //  Пароль отображается точками (по умолчанию)
        {
            DestroyWindow(Edit2);      
            Edit2 = CreateWindow(L"edit", L"", WS_CHILD | WS_VISIBLE | WS_BORDER, 10, 310, 415, 35, hWnd, (HMENU)1000, hInstance, NULL);
            SendMessage(Edit2, WM_SETFONT, WPARAM(hFont1), 0);
            SetWindowText(Edit2, (LPTSTR)&textedit2[0]);
            SendMessage(Edit2, EM_SETPASSWORDCHAR, 0x25cf, 0);  //  Установка точки, за место символа          
        }
        else  //  Пароль отображается символами (если нажата галочка)
        {
            DestroyWindow(Edit2);
            Edit2 = CreateWindow(L"edit", L"", WS_CHILD | WS_VISIBLE | WS_BORDER, 10, 310, 415, 35, hWnd, (HMENU)100, hInstance, NULL);
            SendMessage(Edit2, WM_SETFONT, WPARAM(hFont1), 0);
            SetWindowText(Edit2, (LPTSTR)&textedit2[0]);
        }
    break;

    case WM_DESTROY:
    {
        PostQuitMessage(0);  //  Закрываем программу 
    }
    break;

    default:
        return DefWindowProc(hWnd, msg, wParam, lParam);
    }

    return FALSE;
    }
}

PS Народ, уже прошло больше недели, до сих пор непонятно, в какую сторону копать. Никогда ранее не имел общих дел с WINAPI. Пожалуйста, WINAPIсты, откликнитесь.


Ответы (0 шт):