Вопрос

Я создал AppBar. AppBar всегда остается сверху, когда оно теряет фокус, то вернуться к AppBar, требует двух кликов вместо одного. Я считаю, что первый щелчок активирует форму, а затем со вторым щелчком мыши я получаю события щелчка мыши (как и ожидалось). Можете ли вы дать какие-либо идеи, что здесь можно неправильно? Моя проблема похожа на это Проблемы AppBar и Focus. Отказ К сожалению, OP в этой ссылке не разместил его решение, грустно.

Я создал AppBar после этой статьи из CodeProjectC # ли оболочка, часть 3.

Я посмотрел в него с Spy ++, но не имею никакой идеи, почему это происходит. Вот журнал SPY ++, который я получил тестирование этого сценария (первый клик не работает, второй делает).

<00001> 00090CFE S WM_PARENTNOTIFY fwEvent:WM_LBUTTONDOWN xPos:25 yPos:17
<00002> 00090CFE R WM_PARENTNOTIFY
<00003> 00090CFE S WM_WINDOWPOSCHANGING lpwp:0418EAE4
<00004> 00090CFE R WM_WINDOWPOSCHANGING
<00005> 00090CFE S WM_ACTIVATEAPP fActive:True dwThreadID:00000000
<00006> 00090CFE R WM_ACTIVATEAPP
<00007> 00090CFE S WM_NCACTIVATE fActive:True
<00008> 00090CFE R WM_NCACTIVATE
<00009> 00090CFE S WM_ACTIVATE fActive:WA_CLICKACTIVE fMinimized:False hwndPrevious:(null)
<00010> 00090CFE S WM_IME_SETCONTEXT fSet:1 iShow:C000000F
<00011> 00090CFE S WM_IME_NOTIFY dwCommand:IMN_OPENSTATUSWINDOW dwCommand:00000002 dwData:00000000
<00012> 00090CFE R WM_IME_NOTIFY
<00013> 00090CFE R WM_IME_SETCONTEXT
<00014> 00090CFE S WM_SETFOCUS hwndLoseFocus:(null)
<00015> 00090CFE R WM_SETFOCUS
<00016> 00090CFE R WM_ACTIVATE

Now happens the second click (which works)
<00017> 00090CFE S WM_PARENTNOTIFY fwEvent:WM_LBUTTONDOWN xPos:25 yPos:17
<00018> 00090CFE R WM_PARENTNOTIFY
<00019> 00090CFE S WM_WINDOWPOSCHANGING lpwp:0418E40C
<00020> 00090CFE R WM_WINDOWPOSCHANGING

Глядя на шпион ++ журналы, я считаю, что проблема с активацией, я думаю, что она принимает только Wm_lbuttondown событие, если окно активировано. Но как приходят другие окна не активированы, но они все еще работают одним щелчком мыши (то есть мне не нужно нажать на нее первым).

РЕДАКТИРОВАТЬ: Я думаю, что проблема с Инструментарий. Отказ у меня есть Инструментарий в моем апарте. Теперь, как я проверил это? Хорошо в той же форме, которую я создал кнопку и показал окно сообщения в событии клики, и он работает нормально. Теперь как исправить это?

Это было полезно?

Решение

Хорошо, я понял его, наконец и (в интересах потомства) это то, что происходит. Проблема не с Форма скорее с Инструментарий (Можно воспроизвести слово, я верю). Эта функция по дизайну и не ошибка. в WM_MouseActivate сообщение, внутри WNDPROC ToolStrip, это возвращает Ma_activateandeat. Что активирует ваше окно, т.е. дает ему фокус, но сбрасывает сообщение мыши, поэтому мы должны щелкнуть дважды, потому что первое сообщение мыши отбрасывается.

Теперь решение? Переопределять Wndproc. из Инструментарий в вашем полученном классе и вместо того, чтобы установить свойство Message.Result Ma_activateandeat., установить его Ma_activate.. Отказ Вот учебник о том, как это сделать. Как включить «щелкнуть» для настроек инструментов .NET 2.0 и MENUSTRIP

Надеюсь, это поможет :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top