При замене текста в поле с классом EDIT новый текст накладывается поверх старого. C++ и WinApi
При замене текста в поле с классом EDIT новый текст накладывается поверх старого. Текст меняется при нажатии на какую либо кнопку на клавиатуре или на мышке. Перерисовка окна не помогает. Надеюсь мне кто-то подскажет в чем может быть причина.
#include "inputKeyBind.h"
#include <iostream>
#include <commctrl.h>
namespace GUI {
InputKeyBind::InputKeyBind(HINSTANCE hInstance, HWND parentHwnd, int x, int y, int width, int height) {
HWND hwnd = CreateWindowExW(
0, L"EDIT",
NULL,
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_READONLY,
10, 10, 300, 25,
parentHwnd, NULL, hInstance, NULL);
SetWindowLongPtr(hwnd, GWLP_USERDATA, reinterpret_cast<LONG_PTR>(this));
originalWndProc = (WNDPROC)SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)WindowProc);
}
LRESULT CALLBACK InputKeyBind::WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
static std::string keySequence;
InputKeyBind* keyBind = reinterpret_cast<InputKeyBind*>(GetWindowLongPtr(hwnd, GWLP_USERDATA));
switch (msg) {
case WM_KEYDOWN:
if (wParam == VK_RETURN) {
SetFocus(NULL);
break;
}
SetWindowText(hwnd, "");
InvalidateRect(hwnd, NULL, TRUE);
UpdateWindow(hwnd);
keySequence.clear();
char keyName[32];
GetKeyNameText(lParam, keyName, sizeof(keyName) / sizeof(wchar_t));
keySequence += keyName;
keySequence += " ";
std::wcout << L"YES\n";
SetWindowText(hwnd, keySequence.c_str());
break;
case WM_LBUTTONUP:
SetWindowText(hwnd, "");
InvalidateRect(hwnd, NULL, TRUE);
UpdateWindow(hwnd);
std::cout << "LBUTTON";
SetWindowText(hwnd, "Нажмите клавишу");
//SetFocus(NULL);
break;
}
return CallWindowProc(keyBind->originalWndProc, hwnd, msg, wParam, lParam);
}
}