Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Изменение размеров диалога


Автор: Rickert 27.9.2006, 08:05
Надо сделать так, чтобы диалог не мог быть меньше 800х600.
В методе OnSize диалога пишу:
Код

void CSMSInformerTestDlg::OnSize(UINT ntype, int cx, int cy)
{
    if (cx < 800)
    {
        LPRECT r = new tagRECT;

        GetWindowRect(r);
        MoveWindow(r->left, r->top, 808, (r->bottom - r->top));
        delete r;
        return;
    }
    if (cy < 600)
    {
        LPRECT r = new tagRECT;

        GetWindowRect(r);
        MoveWindow(r->left, r->top, (r->right - r->left), 648);
        delete r;
        return;
    }
    if (m_Log)
    m_Log.MoveWindow(281, 536, cx - 284, cy - 557);
}

Маза в том, что если я изменяю размер диалога одной стороны(высоты, т.е делаю его меньше 600) или высоты и длинны одновременно, то в таком случае не resize'тся элемент m_Log. Почему? smile 
Разобраться никак не могу почему

Автор: zkv 27.9.2006, 08:49
а return'ы,  в строках 10 и 19 не причем?

Автор: Rickert 27.9.2006, 10:50
zkv, нет, ни при чём. Они правильно стоят. Ибо, при MoveWindow тоже вызывается OnSize

Автор: 0x07L 27.9.2006, 10:53
Rickert, тебе нужно обрабатывать WM_GETMINMAXINFO (или как-то так)

Автор: vinter 27.9.2006, 11:22
например вот так
Код

void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 
{

 int cx = ::GetSystemMetrics(SM_CXSCREEN)/8;
 int cy = ::GetSystemMetrics(SM_CYSCREEN)/4;

 lpMMI->ptMinTrackSize.x = 6*cx;
 lpMMI->ptMinTrackSize.y = 2*cy;
 lpMMI->ptMaxTrackSize.x = 6*cx;
 lpMMI->ptMaxTrackSize.y = 2*cy;
 lpMMI->ptMaxPosition.x  = cx;
 lpMMI->ptMaxPosition.y  = cy;
 
 CFrameWnd::OnGetMinMaxInfo(lpMMI);
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)