Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SDI приложение и WM_MOVE 
:(
    Опции темы
kurlyak
Дата 8.3.2013, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 7.11.2007

Репутация: 1
Всего: 3



Вобщим пишу SDI приложение. Ограничил размеры окна на 500 и 250 по x,y (мне так надо).

Код

void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
    // TODO: Add your message handler code here and/or call default
    
    lpMMI->ptMinTrackSize.x = 500;
    lpMMI->ptMinTrackSize.y = 250;
    lpMMI->ptMaxTrackSize.x = 500;
    lpMMI->ptMaxTrackSize.y = 250;

    CFrameWnd::OnGetMinMaxInfo(lpMMI);
}



Теперь другая проблема. Вот я запускаю мое приложение- окно появляеться на экране. Все нормально, размеры окна изменить нельзя- жестко 500 на 250. Но когда щелкаю мышей дважды на нижней кромке окна или на верхней кромке окна (но не на заголовке где название приложения) окно перемещаеться под самый верх экрана. Я пробывал еще разные варианты- например окно может переместиться в самый верх и развернуть нижнюю кромку до самого низу рабочего стола - то есть окно по высоте становиться как высота рабочего стола- причем с левой и правой кромками окна такого не происходит- жестко ширина 500. И так как я запретил изменение размеров окна, то после дв. щелщка на верх.ниж.кромках- оно не разворачиваеться от верху рабочего стола до низу рабочего стола (сохраняя ширину при этом) а просто перемещаеться в самый верх рабочего стола. Короче мне надо что бы окно не прыгало по рабочему столу, когда пользователь может два раза щелкнуть на ниж.верх.кромке окна.

Как я понимаю за перемещение окна отвечает WM_MOVE. Но если я вобще переопределю и заблокирую WM_MOVE - то пользователь по желанию не сможет перемещать окно. То есть мне надо что бы отключить это перемещение окна по дв. наж. мыши на ниж.верх. кромках, но сохранить возможность перемещения окна при желании пользователя.

Хто понял- о чем я, прошу подсказать.
PM MAIL   Вверх
Albor
Дата 9.3.2013, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



запретить изменение размеров окна и задать исходный размер можно в PreCreateWindow(). Нужно просто убрать стиль WS_THICKFRAME в параметре style структуры CREATESTRUCT, передаваемой в функцию и задать параметры cx и cy. И ещё, сделав эти изменения вы можете не увидеть результата, так как программа уже запускалась и есть запись в реестре. Нужно удалить всю ветвь, связанную с программой и после этого вновь запустить свою прогу. 
PM MAIL ICQ   Вверх
kurlyak
Дата 11.3.2013, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 7.11.2007

Репутация: 1
Всего: 3



Спасибо буду пробовать.
PM MAIL   Вверх
kurlyak
Дата 17.3.2013, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 7.11.2007

Репутация: 1
Всего: 3



Попробовал вобщим WS_THICKFRAME - теперь не могу менять размеры окна. А мне надо что бы пользователь мог менять размеры окна.

Я объясняю второй раз в чем проблема. У окна есть нижняя и верняя кромка. Когда два раза щелкаю мышей на нижней кромке в моей программе- окно разворачиваеться во всю высоту экрана, но по ширине остаеться как раньше. Как это заблокировать что бы окно не разворачивалось на всю высоту экрана? У меня Вин7 может под ХР по другому это работает.
PM MAIL   Вверх
Albor
Дата 17.3.2013, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



Цитата(kurlyak @  17.3.2013,  11:32 Найти цитируемый пост)
Попробовал вобщим WS_THICKFRAME - теперь не могу менять размеры окна. А мне надо что бы пользователь мог менять размеры окна.

Ну, вероятно меня натолкнули на такую мысль одинаковые размеры в OnGetMinMaxInfo() smile  и фраза 
Цитата(kurlyak @  8.3.2013,  10:26 Найти цитируемый пост)
Все нормально, размеры окна изменить нельзя- жестко 500 на 250.


Цитата(kurlyak @  17.3.2013,  11:32 Найти цитируемый пост)
Когда два раза щелкаю мышей на нижней кромке в моей программе- окно разворачиваеться во всю высоту экрана, но по ширине остаеться как раньше. Как это заблокировать что бы окно не разворачивалось на всю высоту экрана? У меня Вин7 может под ХР по другому это работает. 

Здесь непонятно, а нет ни какого функционала в программе, обеспечивающего такое поведение? У меня ХР и смоделировать такое поведение не получается. Посмотрел SPY-ем, при двойном щелчке на кромке окна вижу только WM_LBUTTONUP, хоть при одиночном, хоть при двойном клике.
Даблклик проходит только как WM_NCLBUTTONDBLCLK можно попробовать перекрыть этот обработчик убрав базовый вызов OnNcLButtonDblClk()

Это сообщение отредактировал(а) Albor - 17.3.2013, 15:27
PM MAIL ICQ   Вверх
Dem_max
Дата 17.3.2013, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 1
Всего: 39



Чтобы работало как мне помниться нужно не ставить одинаковые цифры
Код

    lpMMI->ptMinTrackSize.x = 500;
    lpMMI->ptMinTrackSize.y = 250;
    lpMMI->ptMaxTrackSize.x = 501;
    lpMMI->ptMaxTrackSize.y = 251;



--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Dem_max
Дата 17.3.2013, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 1
Всего: 39



Попробуй это сообщение обрабатывать
http://vsokovikov.narod.ru/New_MSDN_API/Wi..._nccalcsize.htm


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0467 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.