AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.02.2012, 12:31   #1  
DmitryK is offline
DmitryK
Участник
 
179 / 76 (3) ++++
Регистрация: 22.12.2011
WinApi::SetWindowLong
Уважаемые господа!

Сталкивался ли кто с подобным вопросом?
В методе run FormRun

style = WinApi::GetWindowLong(this.hWnd(), GWL_EXSTYLE);
// результат style = 0x16ca0000
style = style | WS_EX_TOPMOST;
// результат style = 0x16ca0008
style = this.SetWindowLong(this.hWnd(), GWL_EXSTYLE, style);
// результат style = 0x16ca0000

т.е. функция говорит, что отработала, getLastError() - ошибок нет
Но она сама, произвольно восстановила предыдущее заначение стиля

SetWindowLong не работает в axapta, но есть в классе WinApi?
Зачем?

C уважением, Дмитрий.
Старый 16.02.2012, 12:45   #2  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Мне кажется, она работает, но акса потом свойства возвращает на своё усмотрение.
Вы попробуйте на какой-нибудь неаксаптовской форме это сотворить.
Старый 16.02.2012, 13:09   #3  
DmitryK is offline
DmitryK
Участник
 
179 / 76 (3) ++++
Регистрация: 22.12.2011
Вне axapta это работает. Просто странно, в какой момент axapta может вернуть назад? Я смотрел из под отладчика.

С уважением, Дмитрий.
Старый 16.02.2012, 13:29   #4  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
где-то тут
info.onEventGoingIdle
Старый 16.02.2012, 13:32   #5  
DmitryK is offline
DmitryK
Участник
 
179 / 76 (3) ++++
Регистрация: 22.12.2011
Извините, не понял... В указанном методе идет восстановление?

C уважением, Дмитрий.
Старый 16.02.2012, 13:53   #6  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Если вы хотите сделать окно AlwaysOnTop, то достаточно изменить соответствующее свойство в дизайне формы.

Указанный метод используется для всяких насильственных действий над аксаптой: перехватом клавиш, заменой заголовка, сменой фона и пр.
Старый 16.02.2012, 14:00   #7  
DmitryK is offline
DmitryK
Участник
 
179 / 76 (3) ++++
Регистрация: 22.12.2011
Спасибо, я понял. Вопрос был не в том, как сделать форму поверх, а почему себя странно ведет setwindowlong. Чисто академически не могу этого понять... Только, если setwindowlong внутри себя видит, что это axapta и ведет себя, мягко говоря, странно...

С уважением, Дмитрий.
Старый 16.02.2012, 14:03   #8  
DmitryK is offline
DmitryK
Участник
 
179 / 76 (3) ++++
Регистрация: 22.12.2011
Можно было бы полумать, что текущий стиль окна не позволяет его менять... Но это не так, я попробывал с несколькими стилями и результат один и тот же.

С уважением, Дмитрий.
Старый 16.02.2012, 14:47   #9  
mayk is offline
mayk
Участник
Аватар для mayk
 
43 / 65 (3) ++++
Регистрация: 07.03.2008
Цитата:
Сообщение от DmitryK Посмотреть сообщение
Спасибо, я понял. Вопрос был не в том, как сделать форму поверх, а почему себя странно ведет setwindowlong. Чисто академически не могу этого понять... Только, если setwindowlong внутри себя видит, что это axapta и ведет себя, мягко говоря, странно...

С уважением, Дмитрий.
Чисто академически ответ заключается в том, что ставить этот стиль нельзя.
Цитата:
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
WS_EX_TOPMOST0x00000008L The window should be placed above all non-topmost windows and should stay above them, even when the window is deactivated. To add or remove this style, use the SetWindowPos function.
Чтобы сделать через winapi надо передать в setWindowPos вторым параметром HWND_TOPMOST = -1. Тогда сработает. Правда в этот параметр winapi::setWindowPos насильно проставляет ноль.

Последний раз редактировалось mayk; 16.02.2012 в 14:49.
Старый 16.02.2012, 15:02   #10  
DmitryK is offline
DmitryK
Участник
 
179 / 76 (3) ++++
Регистрация: 22.12.2011
WS_EX_TOPMOST0x00000008L The window should be placed above all non...
Не обязательно WS_EX_TOPMOST, я просто привел его для примера... Можно WS_EX_LAYERED или что иное... Не важно.

WinApi::SetWindowPos(this.hWnd(), -1/*HWND_TOPMOST*/, 0, 0, 0, 0, 3/*SWP_NOMOVE*/)

Аналогично не работает ;O)
Из сей работает и то и другое. В чем секрет-то?

С уважением, Дмитрий.
Старый 16.02.2012, 15:04   #11  
DmitryK is offline
DmitryK
Участник
 
179 / 76 (3) ++++
Регистрация: 22.12.2011
WinApi::SetWindowPos скорее всего имеет дополнительную обертку...

С уважением, Дмитрий.
Старый 16.02.2012, 15:14   #12  
DmitryK is offline
DmitryK
Участник
 
179 / 76 (3) ++++
Регистрация: 22.12.2011
Для SetWindowPos попробывал прямой вызов из dll - сработало.
А для SetWindowLong - результат предыдущий.

С уважением, Дмитрий.
Старый 16.02.2012, 17:30   #13  
DmitryK is offline
DmitryK
Участник
 
179 / 76 (3) ++++
Регистрация: 22.12.2011
Извините, господа, был не прав. Все работало и ранее. Возврат функции предыдущее значение...

С уважением, Дмитрий.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptapedia: WinAPI Blog bot DAX Blogs 0 04.07.2011 12:11
Хочу зеленый калькулятор, используя WinApi Pustik DAX: Программирование 5 03.02.2011 14:33
Dynamics AX Geek: Finding files with WinAPI Blog bot DAX Blogs 1 08.10.2009 17:36
WinAPI. Ссылка (POINT) третьего уровня вложенности Владимир Максимов DAX: Программирование 2 06.02.2006 16:28
WinApi. Удаление файлов глючит. NJD DAX: Программирование 10 05.12.2003 13:31
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 09:59.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.