"PostMessage(WM_PAINT)" in "DoTimer" Update problem!!?
-
Folgender Code wird in der DoTimer funktion jede Skunde aufgerufen, und die membervariabelne x, y in DoTimer jedes mal um 10 erhöhr. Aller dings wird die linie nur einmal gezeichnet von 0,0 bus 10,10 und dann nicht mehr warum??
void DlgShowData::OnPaint(){ CPaintDC dc(this); CPen CMyPen; LOGBRUSH logBrush; logBrush.lbStyle = BS_SOLID; logBrush.lbColor = RGB(0,255,255); CMyPen.CreatePen(PS_DOT|PS_GEOMETRIC|PS_ENDCAP_ROUND, 5, &logBrush); CPen *pCOrgPen = dc.SelectObject(&CMyPen); dc.MoveTo(0,0); dc.LineTo(x,y); dc.SelectObject(pCOrgPen); CDialog::OnPaint(); }
-
WM_PAINT verschickt man nicht. Siehe MSDN Library.
-
ja gut.. aber ich will das er immer wieder neu zeichnet im timer inteval.. auserdem springt er jedes sekunde in die paint funktion allerdings zeichent er die linie nicht neu bzw.. länger!! hast du ne andere alernative?
-
Wie gesagt:
MFK schrieb:
Siehe MSDN Library.
Es wäre auch nicht verkehrt, wenn du das eine oder andere Tutorial zu C++ und WinAPI durcharbeiten würdest. Viele Fragen, die du hier stellst, würden sich dadurch erledigen.
-
ja ich weis.. da hast schon recht... arbeite seit 3 wochen mit MFC.. und ich habs eilig... zeit druck diplomarbeit.. sorry wenn ich euch immer so belästige:)
-
Verwende einfach Invalidate! Dan wird neu gezeichnet!
-
danke.. hab jetzt einfach den CDC *p= GetDC(); genommen.. mit dem funktioierts:) deswege auch die frage im anderen tread was der unterschied zwischen CPainDC und CDC ist
-
Das führt aber innerhalb von WM_PAINT Handlern zu dem Problem, dass der Handler immer wieder aufgerufen wird! Man muss im WM_PAINT handler auch einen CPaintDC verwenden!
-
wäre es dann besser wenn ich CPaintDC global erzeugen würde und später wieder löschen würde?? oder jedes mal in Paint neu? Problem es gibt keine invalidate funktion
-
BorisDieKlinge schrieb:
wäre es dann besser wenn ich CPaintDC global erzeugen würde und später wieder löschen würde?? oder jedes mal in Paint neu? Problem es gibt keine invalidate funktion
Nein! Das ist überhaupt nicht besser. Die WinApi sieht explizit hier die Funktionen BeginPaint und EndPaint vor. Diese werden durch den CPaintDC gekapselt. Das schlimmste wäre ein globaler CPaintDC!