Ok, je l'ai pensé à elle, donc je vais répondre à ma propre question :)
Lorsque CDockablePane accueil à l'autre, MFC crée CBaseTabbedPane pour tenir CDockablePanes. Pour changer la position de l'onglet qui par défaut est bas (comme dans Visual Studio) vers le haut (comme dans l'onglet normal) vous devez remplace cette méthode dans votre classe
void CDockablePane::OnAfterDock(CBasePane* /*pBar*/, LPCRECT /*lpRect*/, AFX_DOCK_METHOD /*dockMethod*/);
dérivé CDockablePane avec ce code:
CBaseTabbedPane* tabbedPane = GetParentTabbedPane();
if (!tabbedPane) return;
CMFCBaseTabCtrl* tabCtrl = tabbedPane->GetUnderlyingWindow();
if (!tabCtrl) return;
tabCtrl->SetLocation(CMFCBaseTabCtrl::LOCATION_TOP);
OU
HWND hWndTab = NULL;
CMFCBaseTabCtrl* parent = GetParentTabWnd(hWndTab);
if (parent)
{
parent->SetLocation(CMFCBaseTabCtrl::LOCATION_TOP);
}
vous devez passe outre méthode dans toutes les classes dérivées CDockablePane à fonctionner correctement, sinon la position de l'onglet dépendra du volet que vous glisser à faire ck l'autre volet. Par exemple: PaneA a du code pour positionner la tabulation en haut mais pas pour PaneB.
Si vous faites glisser PaneA pour l'ancrer avec PaneB, la position de la tabulation sera en haut.
Si vous faites glisser PaneB pour l'ancrer avec PaneA, la position de l'onglet sera en bas qui est la valeur par défaut.