WM_WINDOWPOSCHANGING
От: FSoft Россия http://fsoft.tk/
Дата: 31.12.03 13:42
Оценка:
Есть код на VB (ISubclass_WindowProc — перехват WM_WINDOWPOSCHANGING):

Private mWndPos As WINDOWPOS 'window position
...
Private Function ISubclass_WindowProc(ByVal hwnd As Long, ByVal iMsg As Long, ByVal wParam As Long, ByVal lParam As Long)
As Long
  If iMsg = WM_WINDOWPOSCHANGING Then
    CopyMemory mWndPos, ByVal lParam, LenB(mWndPos)
    With mWndPos
      .x = 0
      .y = 0
      .cx = mW 'screen width
      .cy = mH 'screen height
      .hwndInsertAfter = HWND_TOPMOST
      .Flags = SWP_NOZORDER
    End With
    CopyMemory ByVal lParam, mWndPos, LenB(mWndPos)
  End If
End Function


По идее, это должно препятствовать изменению как размеров и координат
окна, так и положения его поверх остальных окон (Z-order). Но почему-то
всё равно можно изменить его z-order, установив другое окно поверх других:
SetWindowPos hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE

Как можно заставить окно быть поверх других, чтобы его нельзя было
перекрыть никаким окном?

--------------------------------------
С уважением, Михаил Юрасов <fsoftware AT yandex.ru>
Re: WM_WINDOWPOSCHANGING
От: Воронков Василий Россия  
Дата: 31.12.03 13:48
Оценка:
Здравствуйте, FSoft, Вы писали:

FS> Как можно заставить окно быть поверх других, чтобы его нельзя было

FS>перекрыть никаким окном?

WS_EX_TOPMOST
Re[2]: WM_WINDOWPOSCHANGING
От: FSoft Россия http://fsoft.tk/
Дата: 01.01.04 10:57
Оценка:
Здравствуйте, Василий, Вы писали:

FS>> Как можно заставить окно быть поверх других, чтобы его нельзя было

FS>>перекрыть никаким окном?
ВВ>WS_EX_TOPMOST

В том то и дело, что следующее окно с установленным стилем
WS_EX_TOPMOST перекроет предыдущее. Идея в том, чтобы перехватывать
в оконной процедуре сообщение WM_WINDOWPOSCHANGING (происходит перед тем
как изменяется размер/положение окна) и устанавливать lParam нужным образом.
Может я что-то делаю неправильно?

With mWndPos
  .x = 0
  .y = 0
  .cx = mW 'screen width
  .cy = mH 'screen height
  .hwndInsertAfter = HWND_TOPMOST
  .Flags = SWP_NOZORDER
End With


С новым 11111010100 годом всех программеров и программерш!
Михаил Юрасов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.