Подсказка крадет щелчок мышью - PullRequest
1 голос
/ 14 мая 2010

Я пишу собственный TreeView из ScrollableControl. Я решил показать всплывающие подсказки, когда мышь наводит курсор на узлы, текст которых слишком длинный для отображения.

Я обнаружил, что при отображении всплывающих подсказок пользователь не может щелкнуть узел, чтобы выбрать его, потому что (я думаю) он щелкает окно всплывающей подсказки, а не мой элемент управления.

Есть ли простые решения? Насколько я вижу, System.Windows.Forms.TreeView не имеют этой проблемы. Спасибо!

1 Ответ

1 голос
/ 14 мая 2010

Вам необходимо переопределить WndProc в форме всплывающей подсказки и вернуть HT_TRANSPARENT в ответ на сообщение WM_NCHITTEST.

Например:

protected override void DefWndProc(ref Message m) {
    switch (m.Msg) {
        case 0x84://WM_NCHITTTEST
            m.Result = new IntPtr(-1);  //HT_TRANSPARENT
            return;
    }
    base.DefWndProc(ref m);
}

Это заставит Windows поверить в то, что ваш объект невидим для мыши, что приводит к тому, что любые события мыши передаются в окно под ним. (Но только если оба окна относятся к одному и тому же процессу)

...