Nichtmodalen Dialog in Thread starten



  • Hallo an alle,

    ich habe eine Klasse welche Sound erzeugt.
    Die Erzeugung läuft in einem statischem der Klasse zugehörigem Thread.
    Ich möchte nun im Thread einen Dialog aufrufen. Auf diesem soll später was gezeichnet werden.
    Nun soll der Dialog nichtmodal sein.

    Ich habe dem Dialog einige Steuerelemente hinzugefügt. Er besitzt keine OnInitDialog.
    Hier mal meine Vorgehensweise zum aufrufen des Dialogs.

    CMyDialog* pDlg = new CMyDialog();
    pDlg->Create(); 
    pDlg->ShowWindow(SW_SHOW);
    

    Der Dialog wird auch gestartet, allerdings leer also ohne meine Steuerelemente und hört nicht auf zu laden.

    Zerstören lässt er sich.
    Was könnte hier falsch laufen?

    Gruß



  • mal so ins blaue getippt, da ich den rest deines Threads net kenne, wird der Messageloop deines Dialoges nicht bedient, aber wie gesagt das ist nur eine Vermutung, mehr Quelltest bringt da Aufklärung.



  • Oh das könnte möglich sein.
    Ist mein erster nichtmodaler Dialog.
    Was müsste ich denn machen um den zu bedienen?



  • na ich weiss ja nicht wie dein Thread aufgebaut ist. Quelltext haste ja net gepostet.

    1. den Dialog außerhalb des Thrad starten und die nötigen Daten per Postmessagen an den Dialog senden
    2. läuft dein Thread in einer Schleife, dann sollte er zyklisch rechenleistung frei geben also Sleep() aufrufen
    3. du kannst auch den MeaageLoop selbst bedienen
    http://www.mpdvc.de/html.htm#Q75
    4. wenn de ganz gut bist machst du eine kombination aus 3. und 4.

    mehr fällt mir gerade nicht ein



  • Wovon brauchst du Quellcode? Was im Thread passiert ist erstmal nur der Aufruf des Dialogs mit Create und ShowWindow.
    Werde mir den Link mal durchlesen, danke.

    EDIT:
    Anhand des Links, kann ich da auch einfach PreTranslateMsg im Dialog aufrufen?



  • mr. main schrieb:

    Wovon brauchst du Quellcode? Was im Thread passiert ist erstmal nur der Aufruf des Dialogs mit Create und ShowWindow.
    Werde mir den Link mal durchlesen, danke.

    Wenn danach dein Thread beendet wird, hast du schon dein nächstes Problem, denn du resevierst Speicher mit new und der wird nicht wieder frei gegeben. Wobei wenn du den Thread gleich wieder beendest, kann das eigentlich nichts mit dem Messageloop zu tun haben. Aber falls es nix ausmacht kannste ja trotzdem mal deinen Thread-Code hier Posten

    mr. main schrieb:

    EDIT:
    Anhand des Links, kann ich da auch einfach PreTranslateMsg im Dialog aufrufen?

    Willst du selbst als Messaageloop PreTranslateMsg aufrufen oder wie is das gemeint, also selbst aufrufen is keine so gute Idee, damit werden immer noch keine Messages des Dialogs abgearbeitet, da gehört noch mehr dazu, schau dir lieber den Link an wie man das macht


  • Mod

    Der Thead benötigt in jedem Fall eine komplette Message-Loop, sonst passiert in dem Dialog nichts. Grundsätzlich muss man eine Messageloop in einem Thread installieren, wenn dieser Fenster erzeugt.


Anmelden zum Antworten