Zeichenbereich initialisieren und zeichnen bei Programmstart



  • Bezug: http://www.c-plusplus.net/forum/viewtopic-var-t-is-102750.html

    Mir ist gerade aufgefallen, dass das völlig doof von mir war, ich will das eigentlich schon bei Programmstart erledigt haben, sprich der Zeichenbereich soll nach Programmstart schon mit weiss gefüllt und mit Gitter versehen sein. Aber ich schaffe es nicht, wenn ich das alles in OnInitDialog() reinkritzle, ignoriert er es einfach. Muss ich evtl. noch OnPaint() irgendwo aufrufen?

    BOOL CLineAnalyzerDlg::OnInitDialog ()
    {
        ...
        CPen penBlack(PS_DOT, 1, RGB(0,0,0));
        CPen penGray(PS_SOLID, 1, RGB(212,208,200));
        LPRECT PaintRect = new RECT;
        CWnd* DrawHandle = GetDlgItem(IDC_GRPH_AREA_ONE);
        CClientDC dc(DrawHandle);
        DrawHandle->GetClientRect(PaintRect);
        int x = PaintRect->right;
        int y = PaintRect->bottom;
        // Zeichenbereich weiss füllen
        dc.FillSolidRect(1, 1, x-2, y-2, 0x00FFFFFF);
        dc.SelectObject(&penBlack);
        for (int i=1; i<8; ++i)
        {
            // Horizontales Grid
            dc.MoveTo(1,(y-2)*i/8);
            dc.LineTo(x-1,(y-2)*i/8);
            // Vertikales Grid        
            dc.MoveTo((x-2)*i/8, 1);
            dc.LineTo((x-2)*i/8, y-1);
        }
        // Beschriftung anpassen
        SetDlgItemText(IDC_STATIC_FREQ_END, "8.0");
        SetDlgItemText(IDC_STATIC_FREQ_MID, "4.0");
    
        // TODO: Hier zusätzliche Initialisierung einfügen
        return TRUE;  // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
    

    Thx for help.

    zwette



  • Immer wenn Dein Dialog (neu)gezeichnet werden muss, wird die OnPaint Methode aufgerufen.
    Wenn Du also etwas außerhalb zeichnest, dann wird die beim nächsten neuzeichnen wieder entfernt.
    Daher bringt es nix in OnInitDialog zu zeichnen!
    Was gezeichnet werden soll muss Du mit OnPaint koordinieren...



  • Also meinen Kladeradatsch in eine InitGraph()-Funktion und dann:

    BOOL CLineAnalyzerDlg::OnPaint()
    {
        ...
        if (m_bFirstTime) InitGraph(); // m_bFirstTime = BOOL-Variable, damit InitGraph() nur einmal ausgeführt wird
        ...
        m_bFirstTime = false;
    }
    

Anmelden zum Antworten