IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

CDialog dans une CView


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 8
    Par défaut CDialog dans une CView
    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

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    J'ai déjà eu des problèmes avec le OnSize() qui est appelé trop tôt et je n'ai jamais trouvé de solution élégante.

    Ce que je fait dans ce cas, c'est dans OnInitDialog(), je positionne un membre de la classe booléen à true (ce booléen est initialisé à false dans le constructeur de la classe)

    et ensuite je ne traite pas le message OnSize() tant que ce booléen faut false (mais je le passe quand même le message à la classe de base).

    C'est pas très propre mais cela m'a dépanné.

    Maintenant, les raisons de pourquoi le OnSize() est appelé trop tôt, je n'ai pas trop cherché.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

Discussions similaires

  1. CDialog dans une DLL à partir d'un EXE en C
    Par mastergoddot dans le forum MFC
    Réponses: 10
    Dernier message: 05/07/2007, 15h26
  2. [MFC] CDialog dans une CFrameWnd
    Par r0d dans le forum MFC
    Réponses: 6
    Dernier message: 16/05/2006, 09h43
  3. [MFC] Dessin d'un CButton dans une CView ?
    Par ZeMike dans le forum MFC
    Réponses: 1
    Dernier message: 12/04/2006, 15h06
  4. Afficher une FormView dans une Cview ?
    Par djiwalloo dans le forum MFC
    Réponses: 1
    Dernier message: 10/09/2005, 18h36
  5. [MFC] Glisser/Déposer dans une CView
    Par octopus984 dans le forum MFC
    Réponses: 2
    Dernier message: 26/04/2005, 10h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo