Odpalam okno standardowo za pomocą DialogBox, ale te okna są zwykle strasznie malutkie przy dużej rozdzielczości ekranu, np. przy 1600.
Tam jest zwykle czcionka 8 pts, co było może i dobre ale w 1995r - monitory były wtedy malutkie.
Obecnie na dużym monitorze bez problemu można wrzucić czcionkę 10 pts albo i 12.
Jak to zrobić, znaczy przeskalować cały dialogbox, i razem z tymi kontrolkami, oczywiście.
Powiedzmy że tworzę wcześniej czcionkę dla okienek, i rozmiar 10 zamiast 8 pts:
h = -MulDiv(10, screem_dpi, 72);
dlgFont := CreateFont(h, 0,0,0, FW_NORMAL, 0,0,0, DEF_CHARSET, 0, 0, 0, FF_SWISS, 'Tahoma');
Może być oczywiście inna nazwa zamiast Tahoma, no ale to jest mało nieistotne.
Potem dialog trzeba odpowiednio przeskalować, np. w WM_INITDIALOG.
Mogłoby to jakoś tak wygldać
void rescaledlg(HWND dlg)
{
SendMessage(dlg, WM_SETFONT, dlgfont,0); // nie wiem czy to jest potrzebne, ale raczej nie zaszkodzi
rescale(dlg, 0); // powiedzmy że to tylko powiększamy - tak w dół i w prawo
HWND hwn = GetWindow(dlg, GW_CHILD);
while ( hwn ) {
SendMessage(hwn, WM_SETFONT, dlgFont,0);
rescale(hwn, dlg); // a to trzeba powiększyć i jeszcze przesunąć odpowiednio...
hwn = GetWindow(hwn, GW_HWNDNEXT);
}
}
void rescale(HWND child, HWND parent)
{
Rect r, rp;
GetWindowRect(child, &r);
// tu coś przeliczamy - jak ?
// ostatecznie ustawiamy przeskalowane okno:
SetWindowPos(child, 0, r.left, r.top, r.right-r.left, r.bottom-r.top, SWP_NOACTIVATE | SWP_NOZORDER);
}