Je suis occupé à migrer une application MFC pour lui ajouter les fonctionalités de MFC 2008. Mon problème se situe lors de l'ajout du support des "tabbed groups".
Pour résumer simplement, chaque vue (CView) comporte un formulaire sous forme de CDialog. Chacunes de ces vues utilise l'évenement "OnDraw" pour retailler dynamiquement le CDialog à la taille de la vue avec un "SetWindowPos(NULL,ux,uy,w,h,SWP_NOZORDER)". C'est-à-dire que si la vue est retaillées, il faut que le formulaire à l'intérieur suive. Les vues sont créées grâce à des fonctions disponibles dans la ribbon bar. Je n'ai pas choisi ce design et je ne peux pas envisager de le changer.
Mon problème est que l'assert sur cette fonction dans le fichier winoccp.cpp:318 "ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));" échoue lors de la création de la première vue.
Mon observation me montre que la création d'un tab provoque la création d'un conteneur de type TabWnd et que celui-ci n'existerait pas encore lors du premier appel à OnDraw de la vue. Le SetWindowPos() du CDialog est donc appellé mais son m_hWnd n'est pas encore valide à ce moment-là...
Si quelqu'un a une piste pour savoir où je pourrais déplacer cette gestion de la taille des CDialog pour ne pas l'appeller avant la création de son conteneur parent (OnSize est aussi appellé trop tot) ou alors comment créer ce conteneur à l'avance (MDITabNewGroup(FALSE) ne fonctionne pas pour forcer la création du TabWnd).
Merci d'avance
Partager