16.02.2012, 12:31 | #1 |
Участник
|
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 |
----------------
|
Мне кажется, она работает, но акса потом свойства возвращает на своё усмотрение.
Вы попробуйте на какой-нибудь неаксаптовской форме это сотворить. |
|
16.02.2012, 13:09 | #3 |
Участник
|
Вне axapta это работает. Просто странно, в какой момент axapta может вернуть назад? Я смотрел из под отладчика.
С уважением, Дмитрий. |
|
16.02.2012, 13:29 | #4 |
----------------
|
где-то тут
info.onEventGoingIdle |
|
16.02.2012, 13:32 | #5 |
Участник
|
Извините, не понял... В указанном методе идет восстановление?
C уважением, Дмитрий. |
|
16.02.2012, 13:53 | #6 |
----------------
|
Если вы хотите сделать окно AlwaysOnTop, то достаточно изменить соответствующее свойство в дизайне формы.
Указанный метод используется для всяких насильственных действий над аксаптой: перехватом клавиш, заменой заголовка, сменой фона и пр. |
|
16.02.2012, 14:00 | #7 |
Участник
|
Спасибо, я понял. Вопрос был не в том, как сделать форму поверх, а почему себя странно ведет setwindowlong. Чисто академически не могу этого понять... Только, если setwindowlong внутри себя видит, что это axapta и ведет себя, мягко говоря, странно...
С уважением, Дмитрий. |
|
16.02.2012, 14:03 | #8 |
Участник
|
Можно было бы полумать, что текущий стиль окна не позволяет его менять... Но это не так, я попробывал с несколькими стилями и результат один и тот же.
С уважением, Дмитрий. |
|
16.02.2012, 14:47 | #9 |
Участник
|
Цитата:
Цитата:
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. Последний раз редактировалось mayk; 16.02.2012 в 14:49. |
|
16.02.2012, 15:02 | #10 |
Участник
|
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 |
Участник
|
WinApi::SetWindowPos скорее всего имеет дополнительную обертку...
С уважением, Дмитрий. |
|
16.02.2012, 15:14 | #12 |
Участник
|
Для SetWindowPos попробывал прямой вызов из dll - сработало.
А для SetWindowLong - результат предыдущий. С уважением, Дмитрий. |
|
16.02.2012, 17:30 | #13 |
Участник
|
Извините, господа, был не прав. Все работало и ранее. Возврат функции предыдущее значение...
С уважением, Дмитрий. |
|