2016-03-14 3 views
1

Je transfère une ancienne application MFC pour utiliser le module MFC avec l'interface utilisateur du ruban et l'interface utilisateur du ruban ne traite pas les commandes de mosaïquage des fenêtres MDI telles que ID_WINDOW_TILE_VERT. Y a-t-il un moyen d'activer cette fonctionnalité?Comment faire pour contrôler le ruban dans le MFC à traiter ID_WINDOW_TILE_VERT

pas à pas unique à travers la source MFC je reçois aussi loin que ce qui suit dans C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ atlmfc \ src \ mfc \ winmdi.cpp, qui semble correcte;

BOOL CMDIFrameWnd::OnMDIWindowCmd(UINT nID) 
{ 
    ASSERT(m_hWndMDIClient != NULL); 

    UINT msg; 
    UINT wParam = 0; 
    switch (nID) 
    { 
    default: 
     return FALSE;  // not for us 
    case ID_WINDOW_ARRANGE: 
     msg = WM_MDIICONARRANGE; 
     break; 
    case ID_WINDOW_CASCADE: 
     msg = WM_MDICASCADE; 
     break; 
    case ID_WINDOW_TILE_HORZ: 
     wParam = MDITILE_HORIZONTAL; 
     // fall through 
    case ID_WINDOW_TILE_VERT: 
     ASSERT(MDITILE_VERTICAL == 0); 
     msg = WM_MDITILE; 
     break; 
    } 

    ::SendMessage(m_hWndMDIClient, msg, wParam, 0); 
    return TRUE; 
} 

J'ai aussi essayé d'appeler

MDITile(MDITILE_HORIZONTAL); 

directement, ce qui fait essentiellement la même chose et ne fonctionne pas.

Répondre

0

De quelques expérimentations, lorsque l'interface MFC est basée sur IMD CMDIFrameWndEx cadres d'hébergement volets ancrables basés CMDIChildWndEx et les documents sont activés par onglets, fenêtres flottantes ne sont pas disponibles et, par conséquent, ni sont carrelage ou en cascade.

Pour activer le carrelage, il suffit de retirer la ligne

EnableMDITabbedGroups(TRUE, mdiTabParams); 

de votre CMainFrame :: OnCreate méthode. L'inconvénient est que vous perdez aussi votre belle interface utilisateur de document à onglets. FWIW, j'ai également essayé d'appeler EnableDocking (CBRS_FLOAT_MULTI) après avoir activé les groupes d'onglets, mais cela ne fait aucune différence. Également en discussion here

Mise à jour: Afin de garder l'interface à onglets et de diviser les écrans, l'alternative suivante fonctionne bien pour diviser une seule vue horizontale avec plusieurs onglets en deux vues, avec onglet en cours dans la nouvelle vue.

void SplitViews(CMDIFrameWndEx *pFrame) 
{ 
    pFrame->MDITabNewGroup(); 
    pFrame->MDITabMoveToNextGroup(); 
}