Funktion nicht nutzbar?



  • main.cpp|28|error: invalid conversion from `HWND__*' to `int'|
    main.cpp||In function int main()':| main.cpp|40|error:toClipboard' cannot be used as a function|
    main.cpp|100|error: expected constructor, destructor, or type conversion before '(' token|
    ||=== Build finished: 3 errors, 0 warnings ===|

    Diese Fehler bekomme ich. Das Problem ist, dass ich weder weiß was sie bedeuten, noch wie ich sie behebe. Könnt ihr mir helfen?

    #include <Windows.h>
    #include <Tchar.h>
    #include <vector>
    #include <Iostream>
    #include <winuser.h>
    #include <winable.h>
    
    using namespace std;
    
    HWND myWindowHandler;
    HWND wnd;
    HWND CWnd;
    struct Window
    {
        basic_string<TCHAR> title;
        HWND handle;
    };
    vector<Window> windows;
    
    HWND select_window (void);
    int toClipboard(CWnd);
    
    int main() {
        myWindowHandler = select_window();
        // Fenster in Originalgröße anzeigen
        ShowWindow(myWindowHandler, SW_RESTORE);
        // Fenster in den Vordergrund holenc
        SetForegroundWindow(myWindowHandler);
        // Tastaturfokus auf Fenster setzen
        SetFocus(myWindowHandler);
        // dc                   // wnd
        toClipboard(myWindowHandler);
    
        return 0;
    }
    
    // Callback fr EnumWindows. Wird aufgerufen fr jedes Fenster
    BOOL CALLBACK EnumWindowsProc (::HWND hwnd, ::LPARAM lParam)
    {
        // Kein Fenster
        if (!IsWindow (hwnd))
            return (TRUE);
    
        // nur sichtbare Fenster auflisten
        if (!IsWindowVisible (hwnd))
            return (TRUE);
    
        // Fensterberschrift ermitteln
        TCHAR title[256];
        if (!GetWindowText (hwnd, title, sizeof (title) / sizeof (title[0])))
            return (TRUE);
    
        // neues Fenster hinzufgen...
        Window wnd;
        wnd.handle      = hwnd;
        wnd.title       = title;
        windows.push_back (wnd);
    
        return (TRUE);
    }
    
    // Listet Fenster auf und regelt Auswahl eines Fensters
    HWND select_window (void)
    {
        // Alle Fenster auflisten
        EnumWindows (EnumWindowsProc, 0);
    
        // Liste aller Fenster ausgeben.
        vector<Window>::iterator window_it = windows.begin ();
        for (int i = 0; window_it != windows.end (); ++ window_it, ++ i)
            _tprintf (_T ("%d : %s\n"), i, window_it->title.c_str ());
    
        // Auswahl des Fensters & Prüfung, ob Auswahl im Gültigskeitsbereich liegt
        unsigned int choice = 0;
        do
        {
            cout << "\nAuf welches Fenster soll aufgeschaltet werden: \n";
            cin >> choice;
        } while (choice < 0 || choice >= windows.size ());
    
        // ausgewählte Fensterhandle zurckgeben
        return (windows[choice].handle);
    }
    
    toClipboard(CWnd * wnd) {
        CDC dc;
        HDC hdc = ::GetDC(myWindowHandler);
        dc.Attach(hdc);
        CDC memDC;
        memDC.CreateCompatibleDC(&dc);
        CBitmap bm;
        CRect r;
        wnd->GetClientRect(&r);
        CString s;
        wnd->GetWindowText(s);
        CSize sz(r.Width(), r.Height());
        bm.CreateCompatibleBitmap(&dc, sz.cx, sz.cy);
        CBitmap * oldbm = memDC.SelectObject(&bm);
        memDC.BitBlt(0, 0, sz.cx, sz.cy, &dc, 0, 0, SRCCOPY);
        wnd->GetParent()->OpenClipboard();
        ::EmptyClipboard();
        ::SetClipboardData(CF_BITMAP, bm.m_hObject);
        CloseClipboard();
    
        memDC.SelectObject(oldbm);
        bm.Detach();  // make sure bitmap not deleted with CBitmap object
    
    }
    

    hochachtungsvoll, stoa



  • In Zeile 28 deklarierst du den Prototypen für deine Funktion toClipboard () , benutzt aber als Datentyp für den Parameter CWnd, welches du aber in Zeile 13 als Variable des Typs HWND definiert hast. Folglich deklariert er die Funktion nicht richtig und diese kann in Zeile 40 auch nicht aufgerufen werden. In Zeile 100 hast du wieder das selbe Problem wie in Zeile 28.



  • du übergibst an die funktion toClipboard ein HWND es wird aber ein CWnd verlangt.

    versuch es mal mit CWnd::Attach

    CWnd wnd;
    wnd.Attach(myWindowHandler);
    
    toClipboard(wnd);
    

Anmelden zum Antworten