2010-05-14 3 views
1

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

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

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

ответ

1

Вам необходимо переопределить 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, считают, что ваш от невидим для мыши, в результате чего любые события мыши, которые будут переданы в окно под ним. (Но только если оба окна из одного процесса)

+0

Я использую класс System.Windows.Forms.Tooltip для показа всплывающей подсказки, кажется, что я не могу переопределить wndproc окна всплывающей подсказки. – deerchao

+0

Мне удалось использовать свою собственную форму в виде всплывающих окон. Ваш ответ и http://stackoverflow.com/questions/156046/show-a-form-without-stealing-focus-in-c помогли много. – deerchao

+0

Если вы используете класс 'Tooltip', вы не должны иметь эту проблему вообще. – SLaks

Смежные вопросы