CPaintDC auf StaticText



  • Hallo zusammen,
    ich möchte auf einer dialogbasierten Oberfläche etwas zeichnen.

    Dazu habe ich jetzt hier im Forum schon einiges gefunden, aber eine Sache fehlt mir noch:

    Es wird immer

    CPaintDC dc(this)
    

    aufgerufen, wenn ich das mache, wird auf meinem Dialog ab der linken oberen Ecke gezeichnet. Ich möchte das ganze aber an einer anderen Stelle gezeichnet haben, nämlich auf einem Bereich, den ich mit einem statictext-Feld freigehalten habe. Wie kann ich denn jetzt veranlassen, dass dort gemalt wird?

    Ich tappe da echt noch im Dunkeln, habe eine member_variable für das Textfeld angelegt, und dann gibt es diese Funktionen

    GetWindowRect
    

    oder

    GetClientRect
    

    , aber das funktioniert alles nicht.

    Wäre froh, wenn mich hier einer von euch auf die richtige Fährte setzt.

    Danke schön,
    mathias



  • this ist vermutlich Dein Dialog. Du solltest vielleicht besser ein eigenes Control von CStatic ableiten und die Malerei dort machen.



  • this
    

    ist ganz sicher mein Dialog. Wie kann ich dies denn auf mein static feld biegen?

    Was genau meinst du mit dem ableiten eines eigenen Controls? Was hat das für einen Vorteil und wie funktioniert das?



  • Habe es jetzt hinbekommen.

    CRect Rect;
    m_graph.GetClientRect(&Rect);
    CPaintDC dc(&m_graph);
    

    Für meine Zwecke funktioniert das, vielleicht hat aber jemand einen besseren Ansatz.

    mathias



  • Wenn du nicht weisst was Vererbung/Ableiten einer Klasse ist, solltest du dich unbedingt mal belesen dazu, das ist wichtig!



  • Du leitest z.B. ein MyStatic von CStatic ab, und implementierst die ganze Malerei, die Du im Dialog gemacht hast, in diesem MyStatic. Dann ist der Code auch da, wo er hingehört. Das was Du da machst, nennt man allgenein "Frickellösung". Spätestens, wenn Du die Malerei in einem zweiten Dialog brauchst, macht sich das dann bezahlt...



  • Werde das also mit der Ableitung von CStatic mal in Angriff nehmen.
    Und hilft dieser Ansatz, wenn ich aus dem Hauptdialog einen neuen Dialog aufrufe (mit DoModal()) und dort malen möchte? Weil das geht mit meiner Lösung momentan nicht - aber das muss unbedingt funktionieren.
    Ich habe das ganze nach dieser Anleitung implementiert
    http://www.codeproject.com/KB/GDI-plus/startinggdiplus.aspx,
    aber bei dem neuen Dialog (abgeleitet von CDialog) habe ich keine InitInstance()

    mathias


Anmelden zum Antworten