У меня возникла проблема с элементами управления WinAPI Edit в дочернем окне — они не реагируют на щелчки мыши, но работают нормально, если их разместить в главном окне. Другие элементы управления, такие как кнопки, работают нормально в обоих окнах.
У меня есть главное окно с ListView и кнопками, а также дочернее окно, содержащее элемент управления Edit и кнопку.
Вот как выглядит приложение.
Элемент управления Edit в дочернем окне:
Не получает фокус, когда при нажатии
Не показывает текстовый курсор при нажатии
Не позволяет выбирать текст с помощью мыши
Однако: элемент управления «Редактирование» работает отлично, если я помещаю его в главное окно, а не в дочернее окно.
Кнопка в дочернем окне работает нормально и реагирует на щелчки.
Вызов SetFocus() на элемент управления редактированием работает
Window::Window(int WIDTH, int HEIGHT) {
// ... window class registration
hwnd = CreateWindowEx(/* ... main window params */);
// Edit control in main window (THIS WORKS FINE)
// But I need it in the child window
}
У меня возникла проблема с элементами управления WinAPI Edit в дочернем окне — они не реагируют на щелчки мыши, но работают нормально, если их разместить в главном окне. Другие элементы управления, такие как кнопки, работают нормально в обоих окнах. У меня есть главное окно с ListView и кнопками, а также дочернее окно, содержащее элемент управления Edit и кнопку. Вот как выглядит приложение. Элемент управления Edit в дочернем окне: [list] [*]Не получает фокус, когда при нажатии [*]Не показывает текстовый курсор при нажатии [*]Не позволяет выбирать текст с помощью мыши [*]Однако: элемент управления «Редактирование» работает отлично, если я помещаю его в главное окно, а не в дочернее окно. [*]Кнопка в дочернем окне работает нормально и реагирует на щелчки. [*]Вызов SetFocus() на элемент управления редактированием работает [/list] Вот код: Pastebin Создание главного окна [code]Window::Window(int WIDTH, int HEIGHT) { // ... window class registration hwnd = CreateWindowEx(/* ... main window params */);
// Edit control in main window (THIS WORKS FINE) // But I need it in the child window } [/code] Создание дочернего окна [code]ChildWindow::ChildWindow(HWND parentHwnd) { // ... child window class registration hwnd = CreateWindowExW( 0, CHILD_CLASS_NAME, L"Child Window", WS_CAPTION | WS_SYSMENU | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, LV_WIDTH, 0, windowWidth, windowHeight, parentHwnd, // parent is main window NULL, hInstance, NULL );
// This button in the same child window works fine testHwnd = CreateWindowW( L"BUTTON", L"test", WS_BORDER | WS_TABSTOP | WS_VISIBLE | WS_CHILD, // ... same parameters hwnd, (HMENU)CHILD_TEST_BTN_ID, hInstance, NULL ); } [/code] Обработка сообщений [code]bool Window::ProcessMessages() { MSG msg = {}; while (PeekMessageW(&msg, nullptr, 0, 0, PM_REMOVE) > 0) { if (msg.message == WM_QUIT || msg.message == WM_DESTROY) { return false; } TranslateMessage(&msg); // This is present DispatchMessage(&msg); } return true; } [/code] Что я пробовал [list] [*]Различные стили управления редактированием: WS_TABSTOP, ES_AUTOHSCROLL, ES_CLIENTEDGE [*]Явная настройка фокуса: SetFocus(passEditHwnd) работает при вызове при нажатии кнопки [*]EnableWindow(): пробовал включение/отключение — без эффекта [*]TranslateMessage(): уже присутствует в цикле сообщений [*]Z-порядок окон: пробовал BringWindowToTop(), SetWindowPos(), не работает [*]Различные родительские отношения: та же проблема [/list] Спасибо за помощь!