Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как при растягивании ограничить min размер окна Dialog-based приложения?

321
23 января 2003 года
Doomych
124 / / 20.01.2000
Я минимальный размер окна ограничиваю так:

void CSysbackupDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);

................

CRect appRect;
const int x = 608; // ширина окна
const int y = 396; // высота окна

if ( cx <= x || cy <= y )
{
::GetWindowRect(m_hWnd, appRect);
::MoveWindow(m_hWnd, appRect.left, appRect.top, x, y, TRUE);
}
}

Получается достаточно криво. А вот как сделать по уму?

И еще вопрос: почему, если в коде указывать те размеры окна, что стоят в редакторе ресурсов диалога, то окно получится меньше?

Спасибо всем, кто поможет!
380
23 января 2003 года
Arestov
285 / / 20.09.2000
Цитата:
Originally posted by Doomych
А вот как сделать по уму?



По уму диалоги не должны менять размеры (читаем Design Guidelines). Но если очень хочется то обрабатываем сообщение WM_GETMINMAXINFO (или пишем в OnGetMinMaxInfo() если под MFC) там в lParamе получаем указатель на структуру MINMAXINFO, вот она:

typedef struct tagMINMAXINFO {
POINT ptReserved;
POINT ptMaxSize; // макс. размер
POINT ptMaxPosition; // позиция при Maximize
POINT ptMinTrackSize; // мин/макс при растяжении сжатии мышкой
POINT ptMaxTrackSize; //
} MINMAXINFO;


я думаю уже поянтно как ограничить размеры окна... :D

Цитата:
Originally posted by Doomych

И еще вопрос: почему, если в коде указывать те размеры окна, что стоят в редакторе ресурсов диалога, то окно получится меньше?



патамушта диалоги всё мериют ф кракадилах называемых DlgUnits эти кракадилы зависят ат размера шрифта используемога на диалоге. :)) А оконные ф-ции (CreateWindow, MoveWindow и пр.) оперируют пикселями. Штобы палучить эти DlgUnitы используим GetDialogBaseUnits() а лучше MapDialogRect (работает верна фсигда даже если изменён шрифит диалога) в опшим читаим MSDN, пляшем и учим англицкий до двух ночи! ик! :))

3
23 января 2003 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Doomych
Я минимальный размер окна ограничиваю так:

void CSysbackupDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);

................

CRect appRect;
const int x = 608; // ширина окна
const int y = 396; // высота окна

if ( cx <= x || cy <= y )
{
::GetWindowRect(m_hWnd, appRect);
::MoveWindow(m_hWnd, appRect.left, appRect.top, x, y, TRUE);
}
}

Получается достаточно криво. А вот как сделать по уму?

И еще вопрос: почему, если в коде указывать те размеры окна, что стоят в редакторе ресурсов диалога, то окно получится меньше?

Спасибо всем, кто поможет!



А если попробовать так:

void CSysbackupDlg::OnSize(UINT nType, int cx, int cy)
{
const int x = 608; // ширина окна
const int y = 396; // высота окна

CDialog::OnSize(nType, cx<x?x:cx, cy<y?y:cy);
}

Хотя... Обработчик вызывается уже после изменения размеров, так что так не получится... :о(

356
26 января 2003 года
molnij
159 / / 20.06.2000
Может я и ошибаюсь, но помоему что-то подобное (в смысле ограничение размеров окна) я недавно видел в CreateWindow при каком-то подборе флажков - поройся в MSDN... но это, правда, уже будет не MFC...
587
27 января 2003 года
Lion
42 / / 20.04.2000
Вас спасет обработка сообщения ON_WM_SIZING() и следующий код:
Цитата:

void CEeeDlg::OnSizing(UINT fwSide, LPRECT pRect)
{
// TODO: Add your message handler code here
CSize czWindowSize(300, 150);
if((pRect->right-pRect->left)<czWindowSize.cx)
{
pRect->right=pRect->left+czWindowSize.cx;
}
if((pRect->bottom-pRect->top)<czWindowSize.cy)
{
pRect->bottom=pRect->top+czWindowSize.cy;
}
CDialog::OnSizing(fwSide, pRect);
}

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог