Любопытная проблема пропавших без вести, которых передают WM_NCLBUTTONUP, когда окно не максимизируется

Он исчезает, потому что вы используете ev.target.appendChild(document.getElementById(data));.

Каждый элемент может существовать в DOM только в одном экземпляре. Делая appendChild для существующего элемента, вы извлекаете его из того места, где он находится сейчас. Если вы хотите скопировать элемент - вам нужно сделать это явно, например, с помощью метода cloneNode.

ev.target.appendChild(document.getElementById(data).cloneNode());
5
задан Mark Ingram 7 February 2009 в 12:40
поделиться

3 ответа

У меня была такая же проблема. Проблема действительно в том, что нажатие левой кнопки мыши на заголовке окна запускает перетаскивание, и, таким образом, захват мыши, что предотвращает поступление WM_NCLBUTTONUP.

Решение состоит в том, чтобы переопределить WM_NCHITTEST:

LRESULT CALLBACK WndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{
    switch (nMsg)
    {
        ...
        case WM_NCHITTEST:
            Point p(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam);
            ScreenToClient(p);
            if (myButtonRect.Contains(p))
            {
                return HTBORDER;
            }
            break;
    }
    return DefWindowProc(hWnd, nMsg, wParam, lParam);
}

Таким образом, по сути вы сообщаете Windows, что область занята по вашей кнопке не является частью заголовка окна, а является неспецифической частью не клиентской области (HTBORDER).

Сноска: Если вы вызвали SetCapture () и еще не вызвали ReleaseCapture (), когда ожидаете Сообщение WM_NCLBUTTONDOWN поступит, оно не будет доставлено даже с указанным выше изменением. Это может раздражать, так как захват мыши во время взаимодействия с такими пользовательскими кнопками является нормальным, так что вы можете отменить щелчок / выделение, если мышь покидает окно. Тем не менее, в качестве альтернативы использованию захвата,

4
ответ дан 14 December 2019 в 04:49
поделиться

Произвольное предположение - некоторый код получает мышь, вероятно, для упрощения перемещения окна при захвате заголовка. Это объяснило бы также, почему прерывание отладчика заставит сообщение обнаруживаться - взаимодействие отладчика очищает получение мыши.

Я предположил бы, что Вы выполняете Шпиона ++ на том окне и именно дочерних элементах и пытаетесь выяснить, добирается, кнопка обмениваются сообщениями.

Относительно того, как зафиксировать, это - не может помочь Вам там, не смотря на фактический код. Необходимо будет выяснить, кто преступник, и посмотрите на их код.

2
ответ дан 14 December 2019 в 04:49
поделиться

Для добавления к ответу Franci Penov щелчок по строке заголовка интерпретируется как запуск перетаскивания, чтобы изменить местоположение окна. Окно получает мышь, таким образом, это может выполнить перетаскивание. Так как максимизируемое окно не может быть перетащено, получение пропускается и маршруты сообщения обычно.

1
ответ дан 14 December 2019 в 04:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: