Toolbar an Desktop anfügen

anmae

Erfahrenes Mitglied
Hallo nochmal.

ich habe einen Dialog und möchte diesen als Toolbar an eine Fensterseite des Desktop anfügen wenn man ihn dorthin verschiebt (wie bei ICQ). Ich habe eine eigene Titelleiste des Dialogs (desshalb bei der OnMouseMove diese Abfrage)

Ich habe nun gleich mehrere Probleme:

1. Die OnTopmost() wird nicht beim schieben an eine Fensterseite sondern erst beim nochmaligen Titelleiste anklicken wenn man an der Fensterseite ist aufgerufen

2. Der Dialog wird immer an die linke Fensterseite angedockt, nur das wenn er eigendlich rechts andocken sollte der Desktop auch verkleinert wird, wenn ich links andocken möchte dann wird der Desktop nicht verkleinert.

3. Die Größenzuweisungen des Fensters hauen irgendwie nicht hin. es ist leicht nach oben rechts verschoben und der Schließenbutton (oben rechts im Dialog) ist aus dem Dialog rausgeschoben - also nicht mehr sichtbar.

Es haut also gar nichts hin :confused:

hier noch der Code
ich habe dazu folgenden Code

Code:
 void CKontaktLeiste::OnTopmost(int uEdge) 
{
	CRect DlgRect;
	this->GetClientRect(DlgRect);
    APPBARDATA abd; 

    // Specify the structure size and handle to the appbar. 
    abd.cbSize = sizeof(APPBARDATA); 
    abd.hWnd = this->m_hWnd; //hwndAccessBar; 

	if(!(btopMost)){	//topmost setzen
        // Register the appbar. 
        SHAppBarMessage(ABM_NEW, &abd); 
	    abd.rc =DlgRect;
        abd.uEdge = uEdge;       // default edge 

    // Copy the screen coordinates of the appbar's bounding 
    // rectangle into the APPBARDATA structure. 

		int iWidth;
        iWidth = abd.rc.right - abd.rc.left; 
        abd.rc.top = 0; 
        abd.rc.bottom = GetSystemMetrics(SM_CYSCREEN); 

		SHAppBarMessage(ABM_QUERYPOS, &abd); 
        if(uEdge == ABE_RIGHT)   //hier Fehler glaub ich
			abd.rc.left = abd.rc.right - iWidth; 
		else
			abd.rc.right = abd.rc.left + iWidth; 

		SHAppBarMessage(ABM_SETPOS, &abd); 
		
		
		this->MoveWindow( abd.rc.left, abd.rc.top, 
			abd.rc.right - abd.rc.left, 
			abd.rc.bottom - abd.rc.top, TRUE); 

		btopMost=1;

    } else { 

        // Unregister the appbar. 
        SHAppBarMessage(ABM_REMOVE, &abd); 
		this->MoveWindow(
			defaultRect.left,
			defaultRect.right,
			defaultRect.Width(),
			defaultRect.Height(),
			1);
		btopMost=0; //       g_fAppRegistered = FALSE; 
    } 
}
Code:
  void CKontaktLeiste::OnMouseMove(UINT nFlags, CPoint point) 
{	
	
if( nFlags == MK_LBUTTON )
    {
        CRect rc;
        GetDlgItem(IDC_KL_STATIC_BAR)->GetWindowRect(&rc);
        ScreenToClient(&rc);
	
		CPoint  DeskMouse ;
		GetCursorPos(&DeskMouse);

		if(DeskMouse.x < (deskRect.left + defaultRect.Width())){
			OnTopmost(ABE_RIGHT);
		}
		if(DeskMouse.x > (deskRect.right - defaultRect.Width())){
			OnTopmost(ABE_LEFT);
		}

        if( rc.PtInRect(point) )
        {
            ::ReleaseCapture();
            SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, 0);
        }
    }

    CDialog::OnMouseMove(nFlags, point);
}

Falls mir jemand helfen kann:: Vielen Dank!

Grüße Andres
 
Also, das nicht gleich beim verschieben des Fensters angedockt wird liegt wohl daran, das nach dem ersten anklicken des Fensters die CDialog::OnMouseMove den Rest des verschiebens in einer Schleife erledigt.

Weiß jemand wo ich den Code für eine OnMouseMove herbekomme um die nachzubauen?
 
Die Standard-OnMouseMove ruft nur die Funktion CWnd::Default() auf, welche wiederum die DefWindowProc aufruft, nachdem sie sich die letzte Message geholt hat. Ich weiß allerdings nicht, ob Dir das wirklich weiterhilft, wenn Du das nachbaust.
 
moin


Desweteiren lässt die Suchfunktion grüßen.
Ich hab schonmal gezeigt, wie man den Desktop, sozusagen verkleinert, also so das sich Fenster nur noch im angegebenen Bereich maximieren.


mfg
umbrasaxum
 
Zurück