Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Хук. Винда глючит? Добавлено: 22.08.10 02:09  

Автор вопроса:  AWP | Web-сайт: xawp.narod.ru | ICQ: 345685652 
Сделал хук на растягивание окон (WM_GETMINMAXINFO = &H24)

Все работало, но через некоторое время винда перестала обращаться к WinProc c сообщением &H24.
Т.е. она все еще посылает кучу разных сообщений, но не это.

В чём может быть дело?

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 22.08.10 07:12
Винда один раз посылает это сообщение, до WM_NCCREATE, получает от приложения параметры ресайза окна и больше не спрашивает.

Ответить

Номер ответа: 2
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #2
Добавлено: 22.08.10 18:58
  1.  
  2. Public Function WindowProc(ByVal hWnd As Long, ByVal uiMsg As Long, ByVal wParam As Long, ByVal lParam As Long, ByVal dwRefData As Long) As Long
  3.     'From Karl E. Peterson's SnapDialog http://vb.mvps.org/samples/SnapDialog/
  4.     If uiMsg = WM_GETMINMAXINFO Then
  5.         Dim mmi As MINMAXINFO
  6.         ' Snatch copy of current minmax.
  7.         Call CopyMemory(mmi, ByVal lParam, Len(mmi))
  8.         mmi.ptMinTrackSize.x = 250
  9.         mmi.ptMinTrackSize.y = 372
  10.         ' Make sure maximum really is maximum, to avoid flash.
  11.         mmi.ptMaxSize = mmi.ptMaxTrackSize
  12.         ' Send altered values back to Windows.
  13.         Call CopyMemory(ByVal lParam, mmi, Len(mmi))
  14.     ElseIf uiMsg = WM_WINDOWPOSCHANGING Then
  15.         Dim pos As WINDOWPOS, mon As RECT
  16.         ' Snag copy of position structure and process it.
  17.         Call CopyMemory(pos, ByVal lParam, Len(pos))
  18.         ' Get coordinates for main work area.
  19.         Call SystemParametersInfo(SPI_GETWORKAREA, 0&, mon, 0&)
  20.         If Abs(pos.x - mon.Left) <= 10 Then ' Snap X axis
  21.            pos.x = mon.Left
  22.         ElseIf Abs(pos.x + pos.cx - mon.Right) <= 10 Then
  23.            pos.x = mon.Right - pos.cx
  24.         End If
  25.         If Abs(pos.y - mon.Top) <= 10 Then ' Snap Y axis
  26.            pos.y = mon.Top
  27.         ElseIf Abs(pos.y + pos.cy - mon.Bottom) <= 10 Then
  28.            pos.y = mon.Bottom - pos.cy
  29.         End If
  30.         ' Send altered values back to Windows.
  31.         Call CopyMemory(ByVal lParam, pos, Len(pos))
  32.     Else
  33.         WindowProc = HookDefault(hWnd, uiMsg, wParam, lParam)
  34.     End If
  35. End Function

Ответить

Номер ответа: 3
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #3
Добавлено: 22.08.10 21:11
Sharp Она спрашивает об ограничениях. Но ограничивать окно не хочет. Т.е. не всегда хочет.

Winand А это разве не для прилипаний к краям окна?

Ответить

Номер ответа: 4
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #4
Добавлено: 22.08.10 21:31
AWP, WM_WINDOWPOSCHANGING - для прилипания, а WM_GETMINMAXINFO - для того, о чем ты спросил. И хорошо работает.
Хотя хук у меня вот такой http://vb.mvps.org/samples/HookXP/

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам