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; }