Здравствуйте, Fortnum, Вы писали:
F>Существуют какие-нибудь готовые решения для .NET, наподобие вот этого?
F>В принципе, можно и это портировать, но может быть уже есть что-нибудь более мощное, с большим числом кодов и авторазбором параметров, например?
А что там сложного: находите объявления сообщений в виде enuma для дотнета (*), пишите IMessageFilter, конвертируете числовое значение сообщения в значение перечислителя и преобразуете его в строку.
* — например, на pinvoke или где-то на этом сайте видел большущий список.
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, _FRED_, Вы писали:
_FR>А что там сложного: находите объявления сообщений в виде enuma для дотнета (*), пишите IMessageFilter, конвертируете числовое значение сообщения в значение перечислителя и преобразуете его в строку. _FR>* — например, на pinvoke или где-то на этом сайте видел большущий список.
Да, вот такой список и был нужен. Теперь понятно, почему эти константы мне объявлять надо было в одном месте
Чтобы не создавать велосипед — вопрос с разбором параметров тем не менее остался открытым. Хочется видеть координаты окна в WM_MOVE, и т.п.
Здравствуйте, _FRED_, Вы писали:
_FR>пишите IMessageFilter
Кстати, протрассировать хочу окно WPF. Непонятно работает биндинг Left, Top, Width и Height. Мне надо установить Application Bar, ну и как только хэндл я получаю — в OnSourceInitialized я это делаю, регистрирую AppBar и задаю положение окну через прибинденные свойства ViewModel окна. Однако происходит что-то странное: в большинстве случаев все проходит нормально, но иногда, после того как я задаю положение окна в обработчике OnSourceInitialized, приходит потом WM_MOVE со старыми дефолтными координатами, т.е. с теми, с которыми окно имелось на момент вызова обработчика OnSourceInitialized. Причем WM_MOVE этот приходит уже в другом оконном цикле. Пытаюсь понять через refelctor, каким образом и зачем System.Windows.Window (иногда) приводит окно к первичным координатам, пока понять не могу. Может быть это и не сам System.Windows.Window это делает, т.к. в отладчике этот WM_MOVE с координатами, которые я не заказывал, после того как установил свои, приходит прямо из Dispatcher.Run()->..->Dispatcher.GetMessage()->...->Мой хук. Через PostMessage что ли.
I'm trying to create desktop toolbar window using SHAppBarMessage and Window class. I send NEW then QUERYPOS and SETPOS messages. Then I'm trying to set new position for a window (I tried Window Top, Left etc properties, MoveWindow and SetWindowPos functions) but after window position has changed Window receives WM_MOVE message with old coordinates and changes it's position back.
Но она без какого-либо решения. Разве что это, но это не решение
I figured it out -- you have to call SHAppBarMessageHelper.ABSetPos again some number of messages after RegisterBar. I called it the first time Window.ContentRendered is fired; that seems to work.