Обработка сообщения WM_GETMINMAXINFO

Для неординарных вопросов. Если вы опытный программист, попавший в трудную ситуацию, — вам сюда.

Модератор: gaidar

Правила форума
Этот раздел не предназначен для того, чтобы вы адресовали свою проблему профессионалам.
Этот раздел предназначен для профессионалов, которые столкнулись с проблемой и не могут решить ее самостоятельно.
Если вы считаете себя профессионалом, а свою проблему сложной — вам сюда.
Если модератор посчитает, что вы ошиблись, то на первый раз он перенесет ваше сообщение в основной раздел без последствий для автора. Во второй раз тема будет закрыта, а автору будет выписано нарушение. В третий раз автор будет забанен.
M.A.R.K
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 68
Зарегистрирован: 11.11.2007 (Вс) 11:50
Откуда: Иркутск

Обработка сообщения WM_GETMINMAXINFO

Сообщение M.A.R.K » 26.02.2008 (Вт) 6:40

Привет всем.
Код: Выделить всё
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Public Const WM_GETMINMAXINFO = &H24

Public Type POINTAPI
        x As Long
        y As Long
End Type

Public Const GWL_WNDPROC = (-4)

Public Type MINMAXINFO
        ptReserved As POINTAPI
        ptMaxSize As POINTAPI
        ptMaxPosition As POINTAPI
        ptMinTrackSize As POINTAPI
        ptMaxTrackSize As POINTAPI
End Type

Global MMI As MINMAXINFO

Global Prev_hWnd As Long
Function WinAPI_GMMI(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_GETMINMAXINFO Then
    Call CopyMemory(MMI, lParam, Len(MMI))
    MMI.ptMinTrackSize.y = 100
    MMI.ptMinTrackSize.x = 100
Else
    WinAPI_GMMI = CallWindowProc(Prev_hWnd, hWnd, Msg, wParam, lParam)
End If
End Function
Sub SubClass()
Prev_hWnd = SetWindowLong(Form1.hWnd, GWL_WNDPROC, AddressOf WinAPI_GMMI)
End Sub
Sub UnSubClass()
Call SetWindowLong(Form1.hWnd, GWL_WNDPROC, Prev_hWnd)
End Sub

Этот код должен, обрабатывать сообщение GETMINMAXINFO и задавать минимальный размер окна.
Но, увы, код не работает...
Мужики, подскажите, почему код не работает?
Заранее благодарен.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 26.02.2008 (Вт) 8:01

Потому что вместо
Код: Выделить всё
Call CopyMemory(MMI, lParam, Len(MMI))

должно быть
Код: Выделить всё
Call CopyMemory(MMI, ByVal lParam, Len(MMI))


З.Ы. Не рано ли тебе в этот раздел?
Весь мир матрица, а мы в нем потоки байтов!

M.A.R.K
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 68
Зарегистрирован: 11.11.2007 (Вс) 11:50
Откуда: Иркутск

Сообщение M.A.R.K » 27.02.2008 (Ср) 8:21

Vipe, возможно я ошибся с разделом, но все же спасибо за ответ. :)
Встречный вопрос:
Call CopyMemory(MMI, ByVal lParam, Len(MMI)) мы ставим для считывания параметров из lParam.
Как я понимаю, записать измененные параметры в MINMAXINFO необходимо тоже с помощью CopyMemory...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 27.02.2008 (Ср) 8:51

Нет, не нужно.
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Раздел для Профессионалов

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17

    TopList