Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Dateien über 700 Bm kopieren ??

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
16.09.2003, 07:18 Uhr
~proga
Gast


Kann sein das es nicht das war, was er wollte, aber er arbeitet mit der Funktione AfxMessageBox() -> eine MFC-Funktion, also bin ich davon ausgegangen dass das eine Windows-Anwendung ist
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
16.09.2003, 09:39 Uhr
~erlanger24
Gast


Bin auf die Funktion "CopyFileEx" gestoßen ! Sie gibt die Infos für nen Statusbalken zurück .. denks mal das das Prog dann auch nicht abstürzt.

So hab ich sie eingebunden:

int f = CopyFileEx(m_Quelle+"\\"+finder.GetFileName(),m_Ziel+"\\"+finder.GetFileName(),NULL,NULL,FALSE,COPY_FILE_RESTARTABLE);

kann mir jemand sagen wie ich das mit der dritten variable realisieren kann ?
(LPPROGRESS_ROUTINE lpProgressRoutine, // callback function)

angenommen ich hab ein Statusbalken vom Typ CProgressCtrl die heißt m_progress .. wie kann ich mein Problem lösen ?

wäre auch für jedes beispiel dankbar.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
16.09.2003, 09:45 Uhr
virtual
Sexiest Bit alive
(Operator)



--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 16.09.2003 um 09:45 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
16.09.2003, 10:23 Uhr
~proga
Gast


In Wirklichkeit war das hier meine Funktion zum Kopieren...
C++:
/******************************************************************
* Copying file is running in an own thread
*/

DWORD WINAPI CopyThread(LPVOID lpThreadParameter)
{
    BOOL bCancel = FALSE;
    DWORD CopyFlags = 0;
    BOOL bResult = CopyFileEx(chFNDest, FullPath, CopyProgressRoutine, NULL, &bCancel, CopyFlags);

    if (bResult)
    {
        // delete file
        remove(chFNDest);
        Sleep(4000);
    }
    else
    {
        ShowError();
    }

    ExitThread(bResult);
}


und hier die Callbackfunktion...
C++:
DWORD CALLBACK CopyProgressRoutine(
    LARGE_INTEGER TotalFileSize,          // file size
    LARGE_INTEGER TotalBytesTransferred,  // bytes transferred
    LARGE_INTEGER StreamSize,             // bytes in stream
    LARGE_INTEGER StreamBytesTransferred, // bytes transferred for stream
    DWORD dwStreamNumber,                 // current stream
    DWORD dwCallbackReason,               // callback reason
    HANDLE hSourceFile,                   // handle to source file
    HANDLE hDestinationFile,              // handle to destination file
    LPVOID lpData                         // from CopyFileEx
)
{
    int nPos = (TotalBytesTransferred.LowPart * 100) / TotalFileSize.LowPart;
    SendMessage(hProgressBar, PBM_SETPOS, nPos, 0L);
    return PROGRESS_CONTINUE;
}
vielleicht hilft dir das weiter
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
16.09.2003, 11:22 Uhr
~erlanger24
Gast


Danke für die Hilfe .. echt wahnsinn so ein forum.

Kurze Frage zum Abschluß :

Wie schaffe ich es das in der Callbackfunktion der Dialog neu gezeichnet wird ?

Im Moment hab ich zwar den Statusbalken aber den sieht man leider nicht da der Dialog innerhalb der kopier-funktion nicht neu aufgebaut wird.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
16.09.2003, 18:37 Uhr
proga



überprüf nochmal den Code, der Thread wird von Zeit zu Zeit unterbrochen (der Thread wo das Kopieren geschieht) und läuft in die CopyProgressRoutine()-Funktion rein, wo du dann mit
C++:
SendMessage(hProgressBar, PBM_SETPOS, nPos, 0L);
den aktuellen Status an den Balken sendest. Bei mir Funktioniert das sehr gut, dafür habe ich ja in die main die Message-Loop eingebaut. Vergleiche mal ob du auch die richtigen Messages verarbeitest. Du muss also hier
C++:
::PeekMessage(&message, hProgressBar, 0, 0, PM_REMOVE)
als zweiten Parameter den Handle von deinem Balken übergeben, oder NULL, sodass alle messages verarbeitet werden.

Dieser Post wurde am 16.09.2003 um 18:42 Uhr von proga editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
17.09.2003, 11:26 Uhr
~erlanger24
Gast


OK Ich hab die Zeile
int h = SendMessage(hProgressBar, PBM_SETPOS, nPos, 0L); eingefügt
Nach dem Aufruf ist h = 0

Das der Statusbalken sich bewegt(von 0 bis 100 wandert) weiß ich aus dem Debuggen

Was meinst du mit
::PeekMessage(&message, hProgressBar, 0, 0, PM_REMOVE) ?
wo muß ich das in meinem Programm einfügen ?

Kann ich dir das Programm mal schicken ? ich werde noch ganz dolle mit dem Problem
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
17.09.2003, 15:23 Uhr
proga



ok, schick mal das prog, werde mir das mal angucken.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: