int x, y, lines;
x = 400;  // стандартная (и минимальная) ширина ОКНА диалога
lines = medfont->GetLinesCountInText(text, x -40); // считаем кол-во линий
y = lines *16; // высчитываем высоту только текста
if (y < 80) { // если высота текста слишком маленькая
    y = 80; // делаем её минимально допустимой для лучшей визуальности
}
if (lines > 30 ) { // а вот если строк в тексте больше 30 (сликом много)
    x += 180; // увеличиваем ширину окна до 580 px
    lines = medfont->GetLinesCountInText(text, x -40); // опять высчитываем кол-во строк при ширине = 580
    y = lines *16; // опять вычитываем высоту текста (при ширине =580)
}
y += 40; // добавляем отступы по высоте (получаем высоту ОКНА диалога)
if (y > 580) { // если высота ОКНА больше допустимой (вообще 600, но я принял 580)
    y = 580; // устанавливаем фиксированную макс.высоту
    x += 200; // и увеличиваем ширину текста до 780 px
}