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
hier noch der Code
ich habe dazu folgenden Code
Falls mir jemand helfen kann:: Vielen Dank!
Grüße Andres
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
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