bottommost окно
От: __MasteR__ Россия  
Дата: 01.06.04 15:46
Оценка:
Я хочу написать приложение, окно которого должно располагаться под всеми окнами (like Desktop). На delphi.mastak.ru я нашёл вот что:

procedure WMWindowPosChanging(var Message:TWMWindowPosChanging); message WM_WINDOWPOSCHANGING;

//а вот это в implementation

procedure TForm1.WMWindowPosChanging(var Message:TWMWindowPosChanging);
begin
with message.WindowPos^ do flags:=flags or SWP_NOZORDER;
inherited;
end;

Это работает, но мне это нужно сделать без VCL. Пробовал сделать так:

...
 WM_WINDOWPOSCHANGING:
  ...
  SetWindowPos (hwnd, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER);
  ...
// или так:
  WINDOWPOS * ppos = (WINDOWPOS*) lparam;
  ppos->flags |= SWP_NOZORDER;
...

— не работает.
У меня пока так:

 SetWindowPos (hwnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);


Так работает, но при клике на моём десктопе десктоп перерисовывается (выходит на передний план) и потом уходит под все окна.
Заранее благодарю за помощь.
P.S.
Поиск по сайту не помог, по инету — тоже...
В исходниках VCL ничего не понял.
Re: bottommost окно
От: NoFate Россия  
Дата: 01.06.04 16:06
Оценка:
Здравствуйте, __MasteR__, Вы писали:

__M>Так работает, но при клике на моём десктопе десктоп перерисовывается (выходит на передний план) и потом уходит под все окна.

__M>Заранее благодарю за помощь.
__M>P.S.
__M>Поиск по сайту не помог, по инету — тоже...
__M>В исходниках VCL ничего не понял.

The WM_LBUTTONDOWN message is posted when the user presses the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.


Я не уверен, но думаю, что можно не обрабатывать это сообщение вообще. Может быть с сообщением напутал.
... << RSDN@Home 1.1.3 stable silent>>
Re: bottommost окно
От: rus blood Россия  
Дата: 01.06.04 16:25
Оценка:
Попробуй сделать свое окно дочерним настоящего desktop-а.
Тебе это НЕ поможет, но очень красиво...
Имею скафандр — готов путешествовать!
Re: bottommost окно
От: NoFate Россия  
Дата: 02.06.04 08:58
Оценка:
Здравствуйте, __MasteR__, Вы писали:

__M>Я хочу написать приложение, окно которого должно располагаться под всеми окнами (like Desktop).

Вот, кажется нашёл.
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
/* bla-bla-bla */
    if(uMsg == WM_MOUSEACTIVATE)
        return MA_NOACTIVATE;
/* bla-bla-bla */
    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
... << RSDN@Home 1.1.3 stable silent>>
Re[2]: bottommost окно
От: rus blood Россия  
Дата: 02.06.04 09:26
Оценка:
Здравствуйте, NoFate, Вы писали:

NF>Здравствуйте, __MasteR__, Вы писали:


__M>>Я хочу написать приложение, окно которого должно располагаться под всеми окнами (like Desktop).

NF>Вот, кажется нашёл.
NF>
NF>LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
NF>{
NF>/* bla-bla-bla */
NF>    if(uMsg == WM_MOUSEACTIVATE)
NF>        return MA_NOACTIVATE;
NF>/* bla-bla-bla */
NF>    return DefWindowProc(hwnd, uMsg, wParam, lParam);
NF>}
NF>


А при переключении на окно, например, через Alt+Tab это помогает?
Имею скафандр — готов путешествовать!
Re[3]: bottommost окно
От: NoFate Россия  
Дата: 02.06.04 10:19
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>А при переключении на окно, например, через Alt+Tab это помогает?

Думаю, нет.
Там, наверное другое сообщение нужно обработать.
MSDN в помощь
... << RSDN@Home 1.1.3 stable silent>>
Re[4]: bottommost окно
От: Аноним  
Дата: 02.06.04 13:05
Оценка:
Здравствуйте, NoFate, Вы писали:

RB>>А при переключении на окно, например, через Alt+Tab это помогает?

NF>Думаю, нет.
NF>Там, наверное другое сообщение нужно обработать.
NF>MSDN в помощь

Для Alt-TAB не помогает...
MSDN-то MSDN-ом, но меня больше интересует, что VCL делает когда я такой (прведённый выше) код пишу.
Когда я делаю так:
  WINDOWPOS * ppos = (WINDOWPOS*) lparam;
  ppos->flags |= SWP_NOZORDER;


окно все равно выходит на передний план. А ведь тот самый код, как мне сказали в форуме Delphi&Builder,
"в пришедшем меседже устанавливает флаг SWP_NOZORDER"

??
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.