Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Popups zu weit links

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
19.02.2007, 15:41 Uhr
WindDancer1



Hi Leutz,

ich hab ne Frage bzgl. Popups, ich hab eine Form mit nem Menü bei rechtsklick wird ein Popup angezeigt wenn ich so mach direct über dem MausCursor wie mans gewöhnt ist :


C++:
void CKontextmenueDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
     CMenu *m_lMenu = NULL;                // Zeiger vom Typ Menü erstellen
     m_lMenu = GetMenu();                // Zeiger auf Fenstermenü holen
      m_lMenu = m_lMenu->GetSubMenu(0);    // Zeiger auf erstes Untermenü holen
     m_lMenu->TrackPopupMenu(TPM_CENTERALIGN|TPM_LEFTBUTTON,point.x, point.y, this, NULL); // Popup-Menü anzeigen

}




Wenn ich aber erreichen möchte dass je nach dem wo ich hinklicke ein anderes Menü erscheint, werden die 2 versch. Popups viel zu weit links angezeigt, ich habs in OnButtonDown gemacht :


C++:
void CDLG_MenueDlg::OnRButtonDown(UINT nFlags, CPoint point)
{

    CMenu *pMenu = NULL;
    pMenu = GetMenu ();
    
    if (point.x < 218)
    {    
        pMenu = pMenu->GetSubMenu(0);    // Zeiger auf erstes Untermenü holen
        pMenu->TrackPopupMenu(TPM_CENTERALIGN|TPM_LEFTBUTTON, point.x, point.y, this, NULL); // Popup-Menü anzeigen
    }
    else if (point.x > 218)
    {    
        pMenu = pMenu->GetSubMenu(1);    // Zeiger auf zweites Untermenü holen
        pMenu->TrackPopupMenu(TPM_CENTERALIGN|TPM_LEFTBUTTON, point.x, point.y, this, NULL); // Popup-Menü anzeigen
    }    
}



Wisst ihr was ich falsch mache und wies richtig geht ?

regards
ShadowEater
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.02.2007, 17:53 Uhr
Tommix



Hallo,
Du mußt in dem Fall Fenster- in Bildschirmkoordinaten umrechnen:

C++:
ClientToScreen(&point);



Gruß, Tommix

Dieser Post wurde am 19.02.2007 um 17:54 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.02.2007, 18:49 Uhr
WindDancer1



Danke Tommix,

jetzt klappts :

C++:
void CDLG_MenueDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
    CMenu *pMenu = NULL;
    pMenu = GetMenu ();

     ScreenToClient (&point);            // Von Screen in Clientkoordinaten umrechnen
    if (point.x < 218)
    {    
        ClientToScreen (&point);        // Von Client in Screenkoordinaten umrechnen
        pMenu = pMenu->GetSubMenu(0);    // Zeiger auf erstes Untermenü holen
        pMenu->TrackPopupMenu(TPM_CENTERALIGN|TPM_LEFTBUTTON, point.x, point.y, this, NULL); // Popup-Menü anzeigen
    }
    else if (point.x > 218)
    {    
        ClientToScreen (&point);        // Von Client in Screenkoordinaten umrechnen
        pMenu = pMenu->GetSubMenu(1);    // Zeiger auf zweites Untermenü holen
        pMenu->TrackPopupMenu(TPM_CENTERALIGN|TPM_LEFTBUTTON, point.x, point.y, this, NULL); // Popup-Menü anzeigen
    }    
    
}




regards
WinDDancer
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: