Ein kleines Problem mit SetWindowLongPtr
-
Nabend, ein kleines PRoblem bei der oben genannten Funktion:
//Hier "überschreibe" ich ein Fenster mit einer anderen Proc void CWindowsControls::CButton::ActivateDrag(bool bTrue) { if(bCreated) { if(bTrue) PrevWndProcEdit = (WNDPROC)SetWindowLongPtr(bt_hwnd, GWLP_WNDPROC, (LONG_PTR) DragWndProc); else SetWindowLongPtr(bt_hwnd, GWLP_WNDPROC, (LONG_PTR) PrevWndProcEdit); } }//Das heir ist die andere PRoc LRESULT CALLBACK CWindowsControls::CButton::DragWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_DROPFILES: return(SendMessage(GetParent(hwnd), message, wParam, lParam)); default: break; } return CallWindowProc (PrevWndProcEdit, hwnd, message, wParam, lParam); }Fehler meldung in folgender Zeile:
PrevWndProcEdit = (WNDPROC)SetWindowLongPtr(bt_hwnd, GWLP_WNDPROC, (LONG_PTR) DragWndProc);302 aggregate value used where an integer was expected
Ich habe ehrlich gesagt keine Ahnung was das sein kann. Wenn ich die "DragWndProc" aus der Klasse rausnehme und als globale Funktion benutze klappt es -.- habt ihr ne Idee ??
Gruß Chris
-
Wine WNdProc muss entweder einen globale Funktion sein, oder in einer Klasse statisch!
Schau Dir am besten an, wie das andere Frameworks machen (wxWidgets/MFC/usw.).
-
Nunja "statisch" wäre doch ok oder etwa nicht ? Ehrlich gesagt halte ich meine Variante schon für statisch ?! Wie meinst du das ? sonst probier ichs einfach mal aus statisch zu machen

-
Ok, das klappt nun ! Aber wie kann ich an meine "internen" Variablen zugreifen mit einer static Methode ?! ich hab ja in dem fall keine this zeiger
Gruß Chris
-
DWLP_USER
-
oder GWL_USERDATA
-
::SetWindowLongPtr(hWnd, GWL_USERDATA, reinterpret_cast<LONG_PTR>(this)); ::SetWindowLongPtr(hWnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(&CButton::StaticDragWndProc));...
In StaticDragWndProc:CButton* this_ptr = reinterpret_cast<CButton*>(::GetWindowLongPtr(hWnd, GWLP_USERDATA, ...)); return this_ptr->DragWndProc(...);... DragWndProc ist dann nicht statisch ...
-
Danke klappt!