Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Почему срабатывает Windows обработчик сообщения WM_MOVE &  (Прочитано 12785 раз)
0 Пользователей и 1 Гость смотрят эту тему.
lapulya
Молодой специалист

ru
Offline Offline

« : 17-09-2004 16:19 » 

в функции обработчике сообщений окна что то типа этого

switch(message)
{
...
case WM_MOVE:
    return FALSE:
case WM_MOVING:
    return TRUE;
...
}

Внимание вопрос... почему окно двигается???
Записан

С уважением Lapulya
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 17-09-2004 16:46 » 

Цитата

return FALSE:


поставь вместо двоеточия точку с запятой
Записан

Serega
Гость
« Ответ #2 : 17-09-2004 19:40 » 

MSDN: WM_MOVE
This message is sent after a window has been moved.
Записан
Serega
Гость
« Ответ #3 : 17-09-2004 19:43 » 

Код:
Syntax

WM_MOVING
    WPARAM wParam
    LPARAM lParam;
   
Parameters

wParam
This parameter is not used.
lParam
Pointer to a RECT structure with the current position of the window, in screen coordinates. To change the position of the drag rectangle, an application must change the members of this structure.
Записан
Serega
Гость
« Ответ #4 : 17-09-2004 19:44 » 

MSDN все же рулит Ага
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 17-09-2004 19:48 » 

lapulya, сообщение WM_MOVE посылается окну по факту перемешения, а не для решения самого вопроса перемещения. Чтобы нельзя было перемещать окно мышкой, надо убрать заголовок окна.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #6 : 17-09-2004 22:43 » new

Алексей1153,  Отлично  Отлично  Отлично  да это ж я просто описался, компилятор бы меня сразу послал бы (да и код там есессно другой, это ж я только для примера)...

не Serega, что касается ума, он светлехонек весьма
слава богу отличаем незабутку.... (читать я тоже умею)
Цитата

MSDN: WM_MOVE
This message is sent after a window has been moved.

Ну и что .... а вот про MW_MOVING
The WM_MOVING message is sent to a window that the user is moving.
 
и что из этого следует... там даже потом вот что написано

An application should return TRUE if it processes this message. (это про WM_MOVING)
If an application processes this message, it should return zero. (это про WM_MOVE)

очень интересно зачам это делать если винды окно УЖЕ подвинули???
не я не спорю MSDN рулит ... ну просто не для детей, только там почему то не написано, что когда эти сообщения приходят винды всю свою черную работу уже сделали (покрайней мере так получается)

RXL,  а если я не хочу убирать заголовок..., нееее можно конечно через жопу .... типа когда приходит мессага принудительно вызывать SetWindowPos и своей железной рукой ставить окно на место... но это мммммм не эстетично, а попроще как-нить нельзя

думал тут дело в вызове DefWindowProc или возвращаемом параметре из вынкции обработчика сообщений - нифига!!!

мммда ... видать прийдется через жопу Жаль  Жаль   Ха-ха-ха   Ха-ха-ха   Ха-ха-ха   Ха-ха-ха
Записан

С уважением Lapulya
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #7 : 18-09-2004 10:22 » 

lapulya, Попробуй отработать сообшение WM_GETMINMAXINFO. Сам правда я привязывал только размеры окна. Но в принципе ты можеш там привязать и позицию окна.
Вот ее описание.
The WM_GETMINMAXINFO message is sent to a window when the size or position of the window is about to change. An application can use this message to override the window's default maximized size and position, or its default minimum or maximum tracking size.

WM_GETMINMAXINFO  
lpmmi = (LPMINMAXINFO) lParam; // address of structure
 

Parameters

lpmmi

Value of lParam. Points to a MINMAXINFO structure that contains the default maximized position and dimensions, and the default minimum and maximum tracking sizes. An application can override the defaults by setting the members of this structure.

 

Return Values

If an application processes this message, it should return zero.

Remarks

The maximum tracking size is the largest window size that can be produced by using the borders to size the window. The minimum tracking size is the smallest window size that can be produced by using the borders to size the window.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 18-09-2004 11:31 » 

lapulya, можно и без штатного заголовка работать - нарисуй его сам.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #9 : 18-09-2004 16:45 » 

RXL, Оно конечно можно. Но когда стоит вопрос времени. Я как-то пробовал рисовать сам. Также пришлось перерисовать кнопки свертки окна и закрытия. До сих пор до меня не дошло, как вызвать отрисовку стандартных кнопок Виндовса.
Насчет WM_GETMINMAXINFO. Это сообшение посылает Виндовс окну, когда хочет изменить его. И в соответствии с размерами, которые получены действует.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #10 : 19-09-2004 12:37 » 

Кстати вопрос - а зачем запрещать сдвиг окна? Перемена размера - это понятно, а вот взять и запретить мне передвинуть программку вправо как мне удобнее?Не понял Вот как-то странно.
Расскажи.
Записан

А птичку нашу прошу не обижать!!!
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #11 : 20-09-2004 06:31 » 

Гром, это вопрос не ко мне, а к заказчику... вот хочется ему запретить двигать окно и все... Но к моей чести, я его уговорил сделать это опционально (но по умолчанию все равно, двигать нельзя Отлично )
Записан

С уважением Lapulya
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 20-09-2004 08:38 » 

lapulya, а что мешает в, например, OnPaint просто устанавливать WINDOWPLACEMENT ? Тогда даже если и изменится полодение и размер окна, тот тут же установится как надо
Записан

Anonymous
Гость
« Ответ #13 : 20-09-2004 16:48 » 

Алексей1153, ну вот признайся мне как на духу, тебя самого такой вариант устраивает на все 100??? Лично я считаю что это просто крайняк (т.е. когда по другому ну просто нельзя)!!! Да я про это уже собственно писал
Цитата

.... типа когда приходит мессага принудительно вызывать SetWindowPos и своей железной рукой ставить окно на место... но это мммммм не эстетично,

и далее
Цитата

... видать прийдется через жопу      

то Finch, относительно resize работает как часы !!!! как запретить двигаться пока не разобрался... правда только мельком глянул (времени не было)...
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines