Funktion nicht nutzbar?
-
main.cpp|28|error: invalid conversion from `HWND__*' to `int'|
main.cpp||In functionint 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);