CProgressCtrl ich bin zu blöde
-
Hi,
ich habe ein großes Problem mit der Anwendung des CProgressCtrl.
In WindowProc werte ich 2 Nachrichten aus und reagiere dann darauf
mit dem Hochsetzen der Anzeige des Progressbar via pBar->SetPos(xy).Die Messages werden nacheinander abgearbeitet und jeweils das
Progressbar entsprechend durchlaufen es gibt also keine Überschneidungen!
Ich nutze es nure nacheinander mehrfach.Nun habe ich mit SetRange(0,anzahl); festgelegt wie weit
das Progressbar gefüllt wird. Im ersten Fall sind es 191 Datensätze.
Das läuft auch wunderbar durch.Im zweiten Fall wende ich einfach wieder SetRange(0,anzahlxy); an,
habe aber in anzahlxy nun einen Wert von 300.000!Mit jedem mal, dass die Message in WindowProc durchlaufen wird,
wird SetPos() mit +1 hochgesetzt. Ca. alle 300 Zähler wird ein
"Block" im Progressbar dargestellt. Das würde aber in meinem Fall
bedeuten, dass das Progressbar 700 Blocks anzeigen können müssteWie bricht man den Wert für die Range von 300.000 richtig runter?
Theoretisch könnte da auch 1 Mio drin stehen. Aktuell bin ich bei einem
halb gefüllten Progressbar und habe erst 30.000 von 300.000 Datensätzen
abgearbeitet
-
Aus der MSDN:
void SetRange( short nLower, short nUpper );
short: –32,768 to 32,767
Vielleicht kommst du weiter mit:
void SetRange32( int nLower, int nUpper );
-
Ich habe glaube ich, falsch gedacht. Das ProgressBar macht es ja nicht alleine...
Ich setze aktuell die Range auf 0,100 und rechne von der Anzahl der
Datensätze 1% aus. Die aktuell durchlaufenen Datensätze teile ich durch
den Wert, der 1% entspricht und reiche das weiter an SetPos(xy);Damit läuft es so, wie es soll.
Das in der MSDN habe ich übrigens komplett übersehen. Vielen Dank für den Hinweis!!
-
Die Range ist meines Wissens nach auf max. 65536 Werte (d.h. short) beschränkt, d.h. du müßtest deine Werte runter-skalieren.
Edit: ups, zu spät...