ProgressBar!!!!!



  • Hallo,
    während mein Programm mit einem Gerät kommuniziert, soll eine ProgressBar den aktuellen Stand der Kommunikation anzeigen.
    Dabei gibts 2Probleme:

    1.Doch meine ProgressBar wird von anderen Windows verdeckt, eigentlich sollte sie ja beim Starten der Kommunikation in den Vordergrund kommen.
    Wie kann ich die ProgressBar in den Vordergrund holen?

    2.Ist es möglich der ProgressBar einen Rahmen zu geben in der eine Überschrift zu sehen ist?? Wie??


  • Mod

    Du kannst keinen Progress Bar alleine als Frame Window erzeugen.

    Erzeuge einen nicht modalen Dialog oder ein Popup Fenster, in den/das setzt Du Deinen Progressbar und gut ist.



  • Oder für Frame-Windows (SDI/MDI) vielleicht in die Statusbar.

    Gruss, Gio



  • Hab noch eine kleine Frage.
    Meine ProgressBar ist nun in einem eigenen Dialog, ich habe eine Klasse für diesen Dialog von CDialog abgeleitet.
    Wie kan ich nun aus meiner Applikation, hier Par.cpp, eine Funktion aus der ProgressBar-Klasse, hier ProgressBar.cpp, aufrufen?


  • Mod

    Nun wenn Du ein statisches Objekt von diesem Dialog angelegt hast oder per new ein Objekt angelegt hast und die den Zeiger gemerkt hast kannst Du direkt die entsprechende Funktion mit dem . oder -> operator aufrufen.

    // ... in Deiner Klasse
    CMyProgressDlg m_dlgProgress;
    
    // ... Irgendwo wird der Dialog erzeugt
    m_dlgProgress.Create(...);
    
    // Irgendwo benutzt Du die Klasse
    m_dlgProgress.DoItToIt();
    


  • Und Problem gelöst, alles funktioniert super.
    Noch eine Frage: Wie kann man festlegen das sich der Dialog nicht mehr verschieben lässt?


  • Mod

    WM_NCHITTEST im Dialog überschreiben. Default aufrufen und wenn er HTCAPTION returniert dies abändern in HTNOWHERE oder HTCLIENT.



  • Hmm? Es ist mir unklar wie du das denn meinst. Überschreiben ist kein Problem.
    Wo und wie kann ich den return abfabgen und HTCAPTION in HTNOWHERE ändern?

    UINT CProgressBar::OnNcHitTest(CPoint point)
    {
       CDialog::Default();
       return CDialog::OnNcHitTest(point);
    }
    

    Das ist was ich bisher habe 😞


  • Mod

    maRKus23 schrieb:

    Hmm? Es ist mir unklar wie du das denn meinst. Überschreiben ist kein Problem.
    Wo und wie kann ich den return abfabgen und HTCAPTION in HTNOWHERE ändern?

    Wieso CProgressBar? Es geht doch um den Dialog!

    UINT CMyDialog::OnNcHitTest(CPoint point)
    {
       // Just perform the default operation
       UINT uiReturn = CDialog::OnNcHitTest(point);
       // just turn HTCAPTION into HTNOWHERE, leave others...
       return uiReturn==HTCAPTION ? HTNOWHERE : uiReturn;
    }
    

    HTH



  • Der Dialog in dem meine ProgressBar heisst ProgressBar, also Klasse CProgressBar, mit ProgressBar.cpp und ProgressBar.h, ich weiß ist irreführend.

    Auf diese Lösung wäre ich so schnell nicht gekommen.



  • Es funktioniert wie erwartet einwandfrei!!!
    Vielen Dank Martin Richter !!! 👍


Anmelden zum Antworten