Button zum verschieben des Fensters benutzen



  • Hi liebe Leutz,

    ich würde gerne, wie im Titel schon erwähnt, einen Button (Child) zum verschieben meines Hauptfensters (PopupWindow) benutzen, leider kriege ich das nicht wirklich hin.
    Ich bin schon so weit das ich mein fenster bei einem Klick in dieses auch verschieben kann und zwar mit folgendem Code:

    case WM_MOUSEMOVE:
    
    GetCursorPos(&ptMove);
              ScreenToClient(hwndMainWindow, &ptMove);
                     if (!ChildWindowFromPoint(hwndMainWindow, ptMove))
    
                                ReleaseCapture();
                                SendMessage(hwndMainWindow, WM_NCLBUTTONDOWN, HTCAPTION, 0L);
    return 0;
    break;
    

    Kann mir bitte vielleicht jemand auf die Sprünge helfen, wie ich das Capture von meinem Hauptfenster auf den Button bekomme?

    Hier der Button:

    static HWND hwndButtonMove;
    
    hwndButtonMove = CreateWindow("button",
                                   NULL,
                                   WS_CHILD | BS_PUSHBUTTON,
                                   115,
                                   25,
                                   15,
                                   15,
                                   hwndMainWindow,
                                   (HMENU)2,
                                   ((LPCREATESTRUCT) lParam)->hInstance,
                                   NULL);
    

    Hab schon die Suche und Google bemüht, allerdings finde ich da häufig nur halbfertige Häppchen, die keine Rückschlüsse auf die genau Funktionsweise liefern.

    Please Help

    DeeJayExTasy
    

  • Mod

    Nimm gar nicht den Button selbst als Fenster.
    Lass den Button einfach alle Mausnachrichten an das Parent zurück geben (WM_NCHITTEST + HTTRANSPARENT9.
    Im Parent Fenster baust Du auch einen WM_NCHITTEST ein. prüfst ob die Maus im Recangle des Child Buttons ist und lieferst einfach HTCAPTION.

    Dieser Unfug, denn Du mit dem Versenden von Nachrichten machst, die nicht zum Versenden gedacht sind, würde ich bleiben lassen.

    PS: Diese UI Idee finde ich übrigens doof. Warum willst Du das machen und baust keine normale Caption oder erlaubst durch Click auf den Hintergrund ein Verschieben des Fensters?



  • Ich benutze für meine Anwendungen so etwas hier:

    static int xClick;
    	static int yClick;
    .
    .
    .
    		#pragma region WM_LBUTTONDOWN
    		case WM_LBUTTONDOWN:
    			#pragma region DragMove()
    			SetCapture(hWnd);
    			xClick = LOWORD(lParam);
    			yClick = HIWORD(lParam);
    			#pragma endregion
    			break;
    		#pragma endregion
    		#pragma region WM_LBUTTONUP
    		case WM_LBUTTONUP:
    			#pragma region DragMove()
    			ReleaseCapture();
    			#pragma endregion
    			break;	
    		#pragma endregion
    		#pragma region WM_MOUSEMOVE
    		case WM_MOUSEMOVE:
    			#pragma region DragMove()
    			if (GetCapture() == hWnd) 
    			{
    				RECT rcWindow;
    				GetWindowRect(hWnd, &rcWindow);
    				SetWindowPos (hWnd, NULL, (rcWindow.left + LOWORD(lParam) - xClick), 
    										  (rcWindow.top  + HIWORD(lParam) - yClick), 0, 0, SWP_NOSIZE | SWP_NOZORDER);
    			}
    			#pragma endregion
    			break;
    		#pragma endregion
    .
    .
    

    Leg das mit in deine Verarbeitunsschleife und schon wird das Fenster OHNE Button verschoben.


Log in to reply