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üsste 😮

    Wie 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...


Anmelden zum Antworten