Проблема отображения текста внутри EditBox после нажатия злосчастной клавиши CAPS LOCK из-за всплывающей подсказки
В чем заключается проблема:
- Вводим с включенным CAPS LOCKom логин в поле для логина
- Щелкаем по полю для пароля (в это время появляется уведомление)
- Нажимаем на любую клавишу -> текст полностью пропадает
- Наводя на неактивную часть окна, ЧАСТЬ текста возвращается, но текстовая каретка слетает
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сты, откликнитесь.
