none
Problème création & raffraichissement de CDialogBar depuis une DLL RRS feed

  • Discussion générale

  • Bonjour,

    J'aimerais savoir pourquoi une CDialogBar créée dans un *.exe s'affiche automatiquement à la suite d'un appel à CMDIFrameWnd::RecalcLayout,  alors que la même barre créée dans une dll et attachée dans le *.exe cité ci-dessus nécessite un appel explicite à CMDIFrameWnd::RepositionBar ( depuis la Dll ) pour être visible.

    Cet appel à CMDIFrameWnd::RepositioBar est également nécessaire depuis la dll lors d'un redimensionnemet du CMDIFrameWnd principal pour ne pas la voir disparaître, alors que dans le premier cas, elle est "ancrée définitivement".

    Merci par avance de vos réponses.

    • Type modifié Ciprian Duduiala lundi 20 juin 2011 06:12 pas de réponse de l'utilisateur qui a lancé la question
    vendredi 3 juin 2011 08:15

Toutes les réponses

  • "The root cause is that the 2 dialogbar HWNDs you create aren't in the permanent window map of main application"

    http://codeguru.earthweb.com/forum/printthread.php?t=457946&pp=15&page=2

     


    Paul Bacelar, Ex - MVP VC++
    lundi 6 juin 2011 07:50
    Modérateur
  • Bonjour,

    Tjrs par rapport à ce phénomène,

    La dialogbar créée dans la DLL provoque un scintillement des barres de défilement des fenêtres filles ( lorsque celles-ci sont maximizées uniquement ), lors du OnSize du CMDIFrameWnd, quand l'évènement WM_SIZE est géré dans la DialogBar avec un appel à RepositioBars.

    Quel est à votre avis la piste à explorer pour supprimer ce scintillement ?

    mercredi 8 juin 2011 06:49
  • Bonjour,

    J'apporte des précisions supplémentaires.

    J'entends par "barres de défilement des fenêtres filles", les scrollbars des CListView & CTreeView des fenêtres filles ( CMDIChildWnd avec un CSplitterWnd -- à gauche, le TreeView et à droite le ListView )

    Je peux supprimer ce phénomène en faisant un ShowScrollBar(SB_BOTH,FALSE) des CxxxxView en question mais ce n'est qu'un contournement qui ne m'arrange pas.

    Je ne comprends pas ce qui permet d'eviter d'avoir à le faire lorsque la même CDialogBar est créée dans l'exe principal ci ce n'est l'histoire du WindowMap cité plus haut qui reste flou dans mon esprit.

     

    Merci d'avance

    jeudi 9 juin 2011 08:40
  • Il y a un problème avec les différentes solutions présentées dans le lien que je vous ai fournis?

    Ce clignotement vient du fait que les routines des MFC ne "voient" ces fenêtres lors du calcul du layout des fenêtres.

    Je n'ai appliqué aucune des solutions proposées mais elles me paraissaient très bien argumentées.


    Paul Bacelar, Ex - MVP VC++
    lundi 13 juin 2011 16:40
    Modérateur
  • Bonjour,

    En fait, au fur et à mesure des mes investigations, je m'aperçois que le problème est très certainement autre et pas vraiment lié aux CDialogBar.

    Si je me contente de faire un appel explicite à RepositionBars comme je l'expliquai, les Status et ToolBar disparaissent ( en plus du scintillement de la CDialogBar ).

    Les MFC ne "voient" donc effectivement pas la DialogBar lors du RecalcLayout car je pense que RecalcLayout(), dans ces multiples appels à RepositionBars, fait référence à des ressources qui ne sont pas dans son exe mais dans une DLL à coté.

    Ma question se transforme donc en la suivante : Comment depuis l'exe, manipuler les ressources de la DLL contenant la CDialogBar ?

    NB : J'ai essayé des AfxSetResourceHandle( ...vers la Dll ....) et ( ...vers l'exe... ) sans succès.

    Par avance, merci.

    mardi 14 juin 2011 06:55
  • Même avec une Dll d'extension MFC et pas une Dll standard ?
    Paul Bacelar, Ex - MVP VC++
    mercredi 15 juin 2011 09:42
    Modérateur