Window arretieren (mit COM)



  • dann kann ich das Control ja aber doch bewegen nur das es halt wieder an die alte Pos zurück geht. Ich möchte aber das bewegen völlig abstellen.

    gibts denn da kein Property???


  • Mod

    WM_SYSCOMMAND mit SC_MOVE abzufangen.

    Wenn das nicht geht. WM_NCHITTEST für das Fenster abfangen. Den deafult aufrufen und wenn der HTCAPTION returniert einfach HTNOWHERE draus machen.



  • Mache folgende 3 Schritte:

    1. gehe in die *.h Datei deiner Dialogfeldklasse und füge im Messagemap Bereich folgenden Eintrag hinzu:

    // Generierte Message-Map-Funktionen
    	//{{AFX_MSG(CMyDlg)
    	virtual BOOL OnInitDialog();
    	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    	afx_msg void OnPaint();
    	afx_msg HCURSOR OnQueryDragIcon();
    	afx_msg void OnMoving(UINT nSide, LPRECT lpRect);  //<-- Funktion hinzufügen!
    	//}}AFX_MSG
    	DECLARE_MESSAGE_MAP()
    

    2. Danach gehst du in die *.cpp uns suchst dir den "BEGIN_MESSAGE_MAP" und "END_MESSAGE_MAP" Bereich deiner Klasse und fügst dort den Eintrag ON_WM_MOVING() hinzu.

    //Messagemap von CMyDlg
    BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
    	//{{AFX_MSG_MAP(CPolymorphieTestDlg)
    	ON_WM_SYSCOMMAND()
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    	ON_WM_MOVING()     //<-- hinzufügen
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    

    3. Danach brauchst du nur noch folgende Funktion schreiben:

    void CMyDlg::OnMoving(UINT nSide, LPRECT lpRect)
    {
    	GetWindowRect(lpRect);	
    	CDialog::OnMoving(nSide, lpRect);
    }
    

    Voila, das Fenster lässt sich nicht mehr verschieben.



  • Wenn ich GetWindowRect(lpRect) in On Moving ausführe bekomme ich eine Speicherzugriffs Verletzung und das Prog schmiert ab...

    Gruß Don



  • Das Problem hierbei ist einfach dein Beschreibung ist für die MFC und meine Anwendung ist COM.

    Aber trotzdem Danke für die Hilfe...



  • DonGhandi schrieb:

    Das Problem hierbei ist einfach dein Beschreibung ist für die MFC und meine Anwendung ist COM.

    Aber trotzdem Danke für die Hilfe...

    sorry 🙂



  • Kein Problem 😮

    kennt sich hier denn keiner mit COM aus????



  • Scheinbar nicht, aber ich editiers mal in den Betreff, vielleicht schaut dann einer rein. 🙂



  • estartu schrieb:

    Scheinbar nicht, aber ich editiers mal in den Betreff, vielleicht schaut dann einer rein. 🙂

    Danke 😃



  • Hi,

    Ok fals es noch jemanden interessiert, ich hab das Prob gelöst. Und zwar mit der Message WM_WINDOWPOSCHANGING, die liefert im LWert einen Pointer auf die Struct WINDOWPOS. Über diesen Zeiger hab ich dann das Flag SWP_NOMOVE gesetzt.

    lpwp = (LPWINDOWPOS) lParam;
    lpwp->flags |= SWP_NOMOVE;
    

    Und siehe da das Fenster läßt sich nicht mehr verschieben, nochmal Danke an alle die sich die Mühe gemacht haben.

    Don


Anmelden zum Antworten