Progressbar ohne IDE?

stEEdZ

Mitglied
Hallo,
nach ausgiebiger Suche nach einer Lösung für mein ProgressBar-Problem bin ich immer wieder auf die Funktion CProgressCtrl gestoßen.

Ist diese Funktion IDE abhängig? Weil ich bekomm die auch mit dem eingebunden Header afxcmn.h nicht zum laufen :-(
Ich benutze übrigens Dev C++.

Allgemein durchsucht mein Programm alle Laufwerke nach einem vorgegebenen String. Ich nehme mal an, dass da eine ProgressBar zur visuellen Darstellung eh nicht so der Bringer ist weil ich ja das Ende (die 100%) nicht kenne. Hat da jemand einen Denkanstoß für mich? :rolleyes:

Danke im Voraus
steedz
 
Hmm CProgressCtrl ist ein Control (d.h. Klasse) der MFC und wird mit Microsoft Visual C++ (> Express Edition) bereitgestellt.

Am einfachsten lässt du den Balken immer wieder durchlaufen ... so wird dem Benutzer wenigstens deutlich das du noch arbeitest und darüber gibst du einfach die momentane Datei aus. Fertig!
 
Hmm CProgressCtrl ist ein Control (d.h. Klasse) der MFC und wird mit Microsoft Visual C++ (> Express Edition) bereitgestellt.

Am einfachsten lässt du den Balken immer wieder durchlaufen ... so wird dem Benutzer wenigstens deutlich das du noch arbeitest und darüber gibst du einfach die momentane Datei aus. Fertig!

Ja, genau das meinte ich mit IDE abhängig!
Wie kann ich dann in nem Fenster nen Balken durchlaufen lassen?
 
Ok, sorry ich raffs einfach nicht...
also so erstelle ich ein Fenster:
Code:
#include <windows.h>
#include <commctrl.h>
const char g_szClassName[] = "myWindowClass";

// Step 4: the Window Procedure
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_CLOSE:
            DestroyWindow(hwnd);
        break;
        case WM_DESTROY:
            PostQuitMessage(0);
        break;
        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX wc;
    HWND hwnd;
    MSG Msg;

    //Step 1: Registering the Window Class
    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.style         = 0;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = g_szClassName;
    wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);

    if(!RegisterClassEx(&wc))
    {
        MessageBox(NULL, "Window Registration Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    // Step 2: Creating the Window
    hwnd = CreateWindowEx(
        WS_EX_CLIENTEDGE,
        g_szClassName,
        "The title of my window",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
        NULL, NULL, hInstance, NULL);

    if(hwnd == NULL)
    {
        MessageBox(NULL, "Window Creation Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    // Step 3: The Message Loop
    while(GetMessage(&Msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
    return Msg.wParam;
}

diese Geschichte hier versteh ich soweit ganz gut denke ich...

Wie aber jetzt eine Progressbar einfügen?
Initcommoncontrolsex hat damit irgendwie zu tun und in dem Zusammenhang ICC_Progress_Class, aber wie ich das wo einbinde begreif ich momentan einfach nicht :(

Danke im Voraus
stEEdZ
 
Die Erzeugung der Progressbar müsste in deiner Windows Procedure bei WM_CREATE erfolgen:
C++:
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_CREATE:
            {
                INITCOMMONCONTROLSEX InitCtrlEx;
                InitCtrlEx.dwSize = sizeof(INITCOMMONCONTROLSEX);
                InitCtrlEx.dwICC  = ICC_PROGRESS_CLASS;
                InitCommonControlsEx(&InitCtrlEx);
                
                CreateWindowEx( 0,
                                PROGRESS_CLASS,
                                NULL,
                                WS_CHILD | WS_VISIBLE,
                                X,      // TODO: Wert 
                                Y,      // TODO: Wert
                                WIDTH,  // TODO: Wert
                                HEIGHT, // TODO: Wert
                                hwnd,
                                NULL,
                                hInst, NULL);
                            
                return 1;
            }                
                
        // restliche case-Zweige
    }
    
    return 0;
}
Gruß
MCoder
 
ok, danke...
was muss ich includen damit INITCOMMONCONTROLSEX funktioniert?
#include <commctrl.h> langt ja leider nicht :-(
 
Du musst noch die comctl32.lib in dein Projekt einbinden (wie auch immer das funktioniert, ich habe keine Ahnung von Dev C++).

Gruß
MCoder
 
Zurück