Allgemeine Frage zum HWnd und ob Realisierbar?!?!?!



  • Servus,

    Thx für Antwort. Aber das Problem was bisher besteht ist, wie du zum Schluss erkannt hast, das ich nichts über die Objekte weiss ausser deren Klasse. Ich weiss das ich Editboxen der Klasse CEdit in meinem Dialog habe. Jetzt möchte ich wissen wieviele und deren Handle herausfinden.

    Gibt es noch weitere Vorschläge??

    THX
    Hellsgore



  • Hab grad nochmal nachgeschaut:
    Wie wärs denn wenn Du mit CDialog::NextDlgCtrl() über alle Controls iterierst und sie mit GetDlgItem() aktiv/inaktiv schaltest?



  • EnumChildWindows



  • Servus,

    @msdn

    The EnumChildWindows function enumerates the child windows that belong to the specified parent window by passing the handle to each child window, in turn, to an application-defined callback function. EnumChildWindows continues until the last child window is enumerated or the callback function returns FALSE.

    Du weisst ja das ich damit nicht alle Objekte bekomme?
    Habe damit schonmal gearbeitet als ich am Testen war wie ich alle Handles von den Fenster holen kann. Dabei war ich schonmal auf die Funk gestoßen. Hat aber meiner Ansicht glaube ich nichts hiermit zu tun.

    @Cosmixx
    Eine Recht gute Idee doch leider hat das Ding keinen Rückgabewert.

    Moves the focus to the next control in the dialog box.

    void NextDlgCtrl( ) const;
    Remarks
    If the focus is at the last control in the dialog box, it moves to the first control.

    Schade drum wäre ne Idee gewesen. Damit kann ich nur den Focus auf jedes Objekt setzen. Dann kann ich dann auch den Focus abfragen von jedem Objekt und dann vielleicht auf das Objekt kommen. Ist aber wirklich sehr sehr sehr umständlich.

    Habt ihr sonst noch Ideen?

    THX
    Hellsgore



  • Ich hab sowas mal mit GetNextDlgTabItem gemacht - war aber auch nicht das Gelbe vom Ei. 😞



  • Dann hab ich wohl dein Problem missverstanden. 🙄 🙄 😮 😕

    Mit EnumChildWindows kriegst du doch jedes Handle von den Child Fenstern auf deinem Dialog.



  • Servus,

    @msdn
    Ja war leider missverstanden von dir. Will ja die Objekte haben nicht die Childfenster.

    @estartu_de
    GetNextDlgTabItem Ich werde irgendwie nicht daraus schlau. Er gibt dir nen Pointer zurück von dem ersten Objekt auf dem ein Tabstop liegt? Das würde also bedeuten das ich auf das erste Objekt auf jenes ich mit einem Tab springen kann, er mir einen Pointer zurückgibt?

    --------

    Also zum Verständnis...
    Ich weiss:
    - Die Klasse des Objekts
    - Ich kenne das Parent- und ggf. das ChildWindow

    Ich würde gerne wissen:
    - Das Handle des Objekts
    - ggf. ID des Objekts
    - Pointer des Objekts

    Irgendwie gibs da doch bestimmt eine Möglichkeit. Codeguru, Codeproject, Google spucken da nicht wirklich etwas darüber heraus.... oder ich habe nicht gründlich gesucht.

    Vielleicht noch weitere Ideen?

    THX
    Hellsgore



  • Hmm, also bevor du gar nix mehr weißt...

    Mach eine Klasse für deine Edits und lass die sich beim Erstellen beim Dialog anmelden. Der Dialog kann die sich dann merken und später ohne Probleme darauf zugreifen. Vielleicht nicht super elegant aber es sollte funktionieren.



  • Servus,

    @estartu_de
    Tja dann müsste ich mir aber für ComboBoxen, Listenfelder etc. wiederrum eine Klasse erstellen. Das ist wirklich nicht ganz das gelbe vom Ei. Währe aber einen Versuch werd. Doch müsste man dann in einem neuen Projekt abermals neue Klassen deklarieren und das will ich halt nicht.... Schade aber schöne Idee

    Vielleicht noch was anderes??

    THX
    Hellsgore



  • Servus,

    habe da eine Lösung wenn es jemand interessiert. Gerade erstellt also ganz frisch und noch warm 😃 also msdn hat doch recht gehabt mit seinem EnumChildWindow. Ich habe mir das mal etwas genauer angeguckt und kam zum Ergebnis:

    BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)
    {
    	CWnd* cWndTest = FromHandle(hwnd);
    	cWndTest->EnableWindow(FALSE);
    	return TRUE;
    }
    
    void OnBnClickedButton1()
    {
    	EnumChildWindows(this->m_hWnd,EnumChildProc, (LPARAM)this);
    }
    

    Vorsicht wer das ausführt beim dem werden erstmal alle Controls etc. auf Enable FALSE gesetzt. Aber ein dickes THX an euch alle und an msdn der im Prinzip die Lösung auf der Zunge hatte aber etwas anderes dachte 😃

    THX
    Hellsgore


Anmelden zum Antworten