Aussehen des Programmes unabhängig von der Bildschirmauflösung



  • Einen Gruß an alle Experten!
    Ich habe leider ein Problem, zu dessen Lösung mir mittlerweile nichts mehr einfällt.
    Ich hab ein kleiner Programm geschrieben, welches eine bestimmte Art von Daten einliest, analysiert und grafisch darstellt. Die Ergebnisse werden mit dem Befehl Textout und den entsprechenden Koordinatenangaben in das Hauptfenster geschrieben.

    Weil ich das Programm beruflich brauche, hab ich es im Büro installiert und festgestellt, dass es dort auf den Flachbildschirmen vollkommen verkorkst aussieht. Durch die Koordinatenangaben werden Buchstaben übereinandergeschoben und die gesamte Optik ist ruiniert. Dabei dachte ich, dass Windows eigentlich die Programme immer gleich aussehen lassen sollte, egal bei welcher Auflösubng sie gefahren werden.
    Daher meine Frage: Wie macht man den View eines Programmes von der Bildschirmauflösung unabhängig?

    Ein paar Auszüge aus dem Programm:

    Bildschirm initialisieren:

    CSize sizeTotal;
    sizeTotal.cx = 1000;
    sizeTotal.cy = 2700+ab*(pDoc->DatAnz-1);
    SetScrollSizes(MM_LOMETRIC, sizeTotal);

    Dann einen Font definieren:

    fontnormalText.CreateFont(normal,0,0,0,400,FALSE,FALSE,0,
    ANSI_CHARSET, OUT_DEFAULT_PRECIS,
    CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
    DEFAULT_PITCH | FF_SWISS, "Arial");

    Dann Ausgabe:

    S="A Q E";
    pDC->TextOut(1000,-160,S);
    pDC->SelectObject(&fontsmallText);
    pDC->TextOut(1000,-260,"Programm zur Analyse von XXX-Dateien");

    pDC->SelectObject(&fontnormalText);
    pDC->SetTextAlign(TA_RIGHT);
    pDC->TextOut(1800,-30,pDoc->Zeitpunkt);

    Tja, und dann siehts halt aus wie Kraut und Rüben, wenn man eine andere Bildschirmauflösung benutzt. Jetzt habe ich die Koordinaten faktisch so optimiert, dass wenigstens die Hardcopy gut aussieht, aber das Aussehen auf dem Bildschirm ist immer noch mies. Sollte nicht eigentlich View und Hardcopy identisch sein, Thema WYSiWYG?
    Naja, falls einer Hilfe hat, wäre ich dankbar.

    Gruß

    Markus

    p.s.: Hab in den FAQs gesucht, aber nix gefunden.



  • Hallo m_max_schu,

    bin zwar absolut kein Experte, aber sehe ich das richtig, dass du nur Text darstellen willst?
    Dann kannst du dir die Überschreibung von OnPrepareDC() holen und wie unten anpassen:

    void CView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
    {
    	CRect rect; 
    	GetClientRect(&rect);
    	pDC->SetMapMode(MM_ANISOTROPIC);
    	pDC->SetWindowExt(800,800);
    	pDC->SetViewportExt(rect.right,	rect.bottom);
    	pDC->SetViewportOrg(0,0);
    
    	CView::OnPrepareDC(pDC, pInfo);
    }
    

    Dabei gibt SetWindowExt() die Auflösung in, ich sag mal "logischen" Pixeln an
    und SetViewportOrg() den Ursprung deines Koordinatensystems.
    Dann benutzt du für jeden TextOut nur noch logische Pixel und bei einer Fenstergrößenänderung (was implizit ja einer Auslösungsänderung entspricht) wird der Text ensprechend in der Größe und Position angepasst.

    Ich hoffe, dass hilft dir weiter.

    Grüße Squeegee

    PS: Es gibt ein ähnliches Verfahren auch für jegliche Grafikausgabe...



  • Klasse! Danke Sqeegee, ich werds ausprobieren.

    Markus


Anmelden zum Antworten