Bei Programmstart auf CTabCtrl-Feld zeichen
-
Ich habe es schon in der OnPaint Methode versucht. Da passiert auch nichts. Wenn ich allerdings das Dialogfeld mit der Maus ein Stück aus dem Bildschrim und wieder zurück zieh, wird das rechteck gezeichnet.
D.h. wohl, dass kein OnPaint Ereignis ausgelöst wird, wenn der Dialog Initialisiert wird, oder ? Später funktioniert es ja.
-
Doch, es wird ein OnPaint-Ereigniss ausgelöst.
Zeig mal deine OnPaint.
-
An der OnPaint habe ich kaum was verändert:
void CTestDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // Gerätekontext zum Zeichnen SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // Symbol in Clientrechteck zentrieren int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Symbol zeichnen dc.DrawIcon(x, y, m_hIcon); } else { CBrush lSolidBrush(RGB(255, 255, 255)); CRect ac(0,0,10000,10000); pDC->FillRect(ac,&lSolidBrush); CDialog::OnPaint(); } }
Wie gesagt, wenn ich das Dialogfeld verschiebe (ausserhalb des bildschrims und wieder zurück), wird das rechteck gezeichnet.
-
Wann, wo und wie wird pDC erstellt?
-
pDC ist global definiert und bekommt den wert in der OnInitDialog Fkt. zugewiesen:
pDC = m_tab1.GetDC();
-
Hm ... Die Methode gefällt mir nicht. Das ist so gehackt
Du solltest die Sachen immer in die OnPaint des Dialoges machen, auf den du malst ...
-
Wie könnte ich es sonst machen?
Ich will auf ein TabCtrl-Feld mehrere Kurven zeichen, d.h. je nachdem auf welche Registerkarte man klickt, wird eine andere Kurve angezeigt. Funktioniert auch alles wunderbar. Nur soll am Anfang, im Prinzip rein aus optischen Gründen, ein leeres Koordinatensystem gezeichnet werden.
-
Das Zeichnen eben in den Dialogen der einzelnen Registrierkarten erledigen.
-
Die Registerkarten haben keine Dialoge....
-
lol?
Dann kann ich dir auch nicht helfen.