Ich möchte ein ..(HWND hWnd); als Parameter übergeben weiß aber nicht wie...



  • Hallo!

    Ich möchte von einer DLL eine Funktion nützen. Diese Funktion verlangt genau einen Parameter der heißt:.....(HWND hWnd);
    Jetzt hab ich schon in der MSDN in zwei Büchern und im Forum nachgelesen, bis jetzt weiß ich nur das ich ein neues Fenster Registrieren muss.
    Aber alle versuche ein gültiges hWnd Objekt zu erstellen schlugen fehl!

    Im prinzip handelt es sich dabei ja um die Parameter für ein Fenster in dem dann die Funktion aus der DLL etwas macht oder? (wenn nicht hab ich da etwas grundlegend falsch verstanden)

    Wie kann ich ein ganz einfaches hWnd erstellen um die Funktion (aus der DLL) zu Testen? Oder stelle ich mir das vielleicht viel zu einfach vor? 😕

    Ich weiß viele viele Fragen aber ich würde mich sehr über weiterhelfende Ratschläge freuen!

    Danke!
    LG, Ronny



  • Einfach ein MFC Projekt erstellen und die variable m_hWnd in deiner Fensterklasse (CWnd, CDialog, ..) verwenden 🤡



  • Hallo,

    in MFC hat jedes von CWnd abgeleitete Objekt eine Member-Variable m_hWnd, die den Typ HWND hat, folglich könntest du jedes gültige MFC-Fenster dieser Methode übergeben. Aber du solltest auch mal die Dokumentation zu dieser DLL bzw. Funktion lesen, dann weißt du auch, was diese Funktion mit dem Fenster macht, sonst kann man ja kaum etwas sagen (außer herumprobieren und hoffen, daß es nicht abstürzt)

    MfG



  • Hallo!
    Vielen Dank für eure schnellen Antworten!

    Ich bekomme aber folgende Fehlermeldung wenn ich die m_hWnd als Parameter mitgebe:

    error C2440: 'initializing' : 'struct HWND__ *' kann nicht in 'WINM_rc_t' konvertiert werden



  • Dann erwartet die funktion kein HWND sondern ein WINM_rc_t 🤡



  • 🙂 jupp da kann ich nichts einwenden!

    Sorry! War eine blöde Frage!

    Nur ich verstehe nicht wieso er ein WINM_rc_t will! In der beschreibung der Funktion steht:
    -----------------------------------------------------------
    Funktion: WINM_rc_t IpStartReadClipboard(HWND hWnd)

    Beschreibung: Die Funktion öffnet das Clipboard und macht das Fenster hWnd zum Clipboard-Owner.

    Parameter: hWnd Fenster, wird Clipboard-Owner
    ------------------------------------------------------------
    Vor allem habe ich keine Ahnung woher ich ein WINM_rc_t nehmen soll.... und wofür das dann gut sein soll...



  • WINM_rc_t ist doch der return type der Funktion !?!? Das bekommst du doch von Funktion zurück 😕



  • Ja ich hätte eigentlich gedacht das ich mit WINM_rc_t überhaupt nchts zu tun habe und nur den Parameter (HWND) übergeben muss.
    Aber lt. der Fehlermeldung passt ihm das ja nicht...oder ???

    Weißt du was ich der Funktion jetzt als Parameter mitgeben soll und vor allem wie?



  • Du hast es doch bereits selbst gesagt

    Ronny0815 schrieb:

    Parameter: hWnd
    Fenster, wird Clipboard-Owner

    Der Parameter ist ein Handle auf das Fenster/Control.

    Gib mal den Code an, der den Fehler verursacht.
    Laut Fehlermeldung hast du versucht den Rückgabewert in ein HWND zu konvertieren.



  • Hallo!

    Viel Code gibts eigentlich nicht, das ganze ist in einer funktion (eines Buttons) von einem Dialog Fenster:

    // Button Clipboard Starten
    void CTestinpacDlg::OnStarteClipboard()
    {
    HWND hWnd = CWnd::GetSafeHwnd();
    
    WINM_rc_t IpStartReadClipboard(hWnd);
    }
    

    Der Deklaration der Funktion in der Beschreibung ist so:

    WINM_rc_t IpStartReadClipboard(HWND hWnd)
    


  • Hi,

    Die Methode CWnd::GetSafeHwnd() ist nicht statisch, also kannst du sie auch nicht so aufrufen.
    Normalerweise brauchst du ein gültiges CWnd Objekt, aber da du dich in einer von CWnd abgeleiteten Klasse befindest, kannst du GetSafeHwnd() einfach auch auf dich selber aufrufen.

    WINM_rc_t IpStartReadClipboard(hWnd);
    

    ist zwar richtig, macht aber genausowenig Sinn wie

    int 3;
    

    😉
    Deklariere eine Variable vom Typ WINM_rc_t, wenn du den Rückgabewert speichern willst:

    // Button Clipboard Starten
    void CTestinpacDlg::OnStarteClipboard()
    {
    HWND hWnd = GetSafeHwnd(); // entspricht this->GetSafeHwnd();
    
    WINM_rc_t result = IpStartReadClipboard(hWnd);
    }
    

    Grüße Rapha



  • DANKE!

    Jetzt hab ich keine Fehlermeldungen mehr! Ist das schön!! 😋

    Ich hab jetzt result als Parameter übergeben das hat auch genommen... nur ist beim anklicken von dem button nichts passiert..
    Kann aber sein das man bei der Funktion gar nichts sieht ich wollte damit ja nur mal testen! Am besten wird es sein ich suche eine Funktion die ich dann auch verwenden werde und mach dort das selbe...

    Oder kann es sein das noch etwas fehlt?



  • Hm,
    was willst du denn, dass die Funktion macht?
    Irgendetwas?

    Versuche mal

    ShowWindow(hWnd, SW_HIDE);
    

    oder

    EnableWindow(hWnd, false);
    

    Grüße Rapha



  • Ja mir würde ein winziges lebenszeichen fürs erste schon reichen!! 🙂
    Ich möchte eben nur wissen ob es funktioniert und ich in der richtung weitermachen soll.

    Ich habe beide Funktionen von dir probiert! Leider akzeptiert er mir bei beiden keine 2 Parameter also hab ich die Funktionen einfach ohne den Parameter hWnd ausgeführt! Ergebnis war bei ShowWindow das das Fenster weg war im hintergrund anscheinend aber weitergelaufen ist (und abgestürtzt vermute ich)
    und bei enable is das programm einfach nur hängen geblieben...



  • Ronny0815 schrieb:

    Leider akzeptiert er mir bei beiden keine 2 Parameter also hab ich die Funktionen einfach ohne den Parameter hWnd ausgeführt!

    ...hab vergessen, dass du mit MFC arbeitest (deshalb ohne das hWnd).

    Ronny0815 schrieb:

    Ergebnis war bei ShowWindow das das Fenster weg war im hintergrund anscheinend aber weitergelaufen ist (und abgestürtzt vermute ich)

    😃 Das Fenster wurde einfach unsichtbar gemacht 😉
    Mach mal folgendes

    ShowWindow(SW_HIDE);
    Sleep(5000);
    ShowWindow(SW_NORMAL);
    

    Ronny0815 schrieb:

    und bei enable is das programm einfach nur hängen geblieben...

    Genauer gesagt wurde es deaktiviert 😉
    => Es verweigert jegliche Interaktion

    Ok, schlechte beispiele 😃



  • 😃 verstehe ja nicht schlecht!
    nur das ist ja noch kein zeichen das es Funktioiert oder doch?
    Ich finde es schon komisch das gar nichts passiert irgendwas wird die funktion doch zum herzeigen haben oder?



  • sorry nicht das da etwas falsch vertsanden wird...
    bei verstehe ja nicht schlecht fehlt ein beistrich oder enter und das ja gehört weg...
    Ich meine das ich verstehe was du geschrieben hast und das die funktionen nicht schlecht sind (verstecken usw.,....)



  • Zu deiner Frage:
    Die Funktionen funktionieren super 😉



  • Ähm bin jetzt ein wenig durcheinander....

    Die funktion IpStartReadClipboard(hWnd) funktioniert deiner Meinung nach nur zeigt sie nichts oder wie meintest du das?



  • Ach, du meinst IpStartReadClipboard

    Ich habe ehrlich gesagt noch nie etwas von dieser Funktion gehört.
    Und Google lieferte mir auch keine Ergebnisse (0 Treffer).

    Wo hast du die Funktion her?



  • das ist die funktion die ich von der dll testen wollte... die die bis jetzt ja immer fehler meldungen gegeben hatt...
    ich meinte jetzt nur das ich zwar keine fehler meldung mehr habe aber rein gar nichts passiert und das macht mich ein wenig stutzig...


Anmelden zum Antworten