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 :

[MFC] utilisation de printPreview


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 47
    Points : 25
    Points
    25
    Par défaut [MFC] utilisation de printPreview
    bonjour,

    j'utilise un printPreview dans une DLL que j'ai "accrochée" à un programme principal.
    La conception de la fenetre de preview semble OK, le prog passe dans la procédure d'affichage de la fenetre (debug dans les MFC).
    Mais la, rien ne se passe...
    Après examen minutieux, je trouve que la fenetre mere de la printpreview est définie comme la fenetre mere de mon appli (donc rien a voir avec ma dll). Conclusion : mon objet qui hérite de CView permet de créer un printpreview tres bien, mais on le voit pas puisque c'est tjrs lui qui garde le focus (il est en plein écran). Deuxieme demande du printpreview : ca plante : ressource deja allouée comme on pouvait le prevoir. J'en deduis que la fenetre est bien créée (je peux pas le vérifier car si je quitte ma fenetre de ma DLL, je dois fermer le preview avant sinon -> planté).

    Après regardage dans le code des MFC, je vois que la fenetre mere des printpreview est définie par un appel a AfxGetMainWnd().
    Comment contourner le probleme et faire de "DLLMainWnd" ma fenetre mère pour ce printpreview??

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    tu preciser ces points :
    le printpreview c'est le mecanisme standard d'impression doc/view ?
    la view qui la demande d'edition elle est dans la DLL ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    OK:
    Oui ce doit etre le doc view... Ma classe hérite de CView... sinon s'il faut d'autres informations pour le vérifier, dis les moi et je regarde

    Effectivement la view qui demande l'édition fait partie de la DLL.
    C est d'ailleurs de la que semble provenir le problème. car si la DLLs était un programme stand alone il prendrait je pense la bonne classe mère de référence pour l'apercu avant impression. Le problème en gros la, c'est qu'il référence en classe mère une classe hors de ma DLL...

    En tout cas merci de t'intéresser à mon cas!

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    re,
    essaye de rajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    avant l'appel de la commande printpreview .

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    Alors j ai essayé de mettre la lib en static avec ta ligne ... (bonne idée ceci dit)

    j ai des erreurs de linkage... et j ai pas trop l'habitude de debugger du linking...

    [/quote]
    mfcs42d.lib(dllmodul.obj) : error LNK2005: __pRawDllMain already defined in Score.obj
    mfcs42d.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in Score.obj
    mfcs42d.lib(dllmodul.obj) : error LNK2005: __pRawDllMain already defined in Score.obj
    [/quote]

    J ai aussi deux warnings dans la meme veine...
    fcs42d.lib(dllmodul.obj) : warning LNK4006: _DllMain@12 already defined in Score.obj; second definition ignored
    mfcs42d.lib(dllmodul.obj) : warning LNK4006: __pRawDllMain already defined in Score.obj; second definition ignored
    ca veut dire quoi exactement? apparemment ca voudrait dire que le passage en static essaye de redéfinir le point d'entrée de la DLL... mais si c est le cas, la fonction planterait systématiquement, non?
    : :

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    1. désolé pour l'erreur de bloc quote avant.

    Voici le point d'entrée de ma dll : J'ai laissé les commentaire au cas ou ils pourraient éclairer...

    static AFX_EXTENSION_MODULE ScoreDLL = { NULL, NULL };

    extern "C" int APIENTRY
    DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
    {
    UNREFERENCED_PARAMETER(lpReserved);

    if (dwReason == DLL_PROCESS_ATTACH)
    {
    TRACE0("Score.DLL Initializing!\n");

    if (!AfxInitExtensionModule(ScoreDLL, hInstance))
    return 0;

    // Insert this DLL into the resource chain
    // NOTE: If this Extension DLL is being implicitly linked to by
    // an MFC Regular DLL (such as an ActiveX Control)
    // instead of an MFC application, then you will want to
    // remove this line from DllMain and put it in a separate
    // function exported from this Extension DLL. The Regular DLL
    // that uses this Extension DLL should then explicitly call that
    // function to initialize this Extension DLL. Otherwise,
    // the CDynLinkLibrary object will not be attached to the
    // Regular DLL's resource chain, and serious problems will
    // result.

    new CDynLinkLibrary(ScoreDLL);
    }
    else if (dwReason == DLL_PROCESS_DETACH)
    {
    TRACE0("Score.DLL Terminating!\n");
    // Terminate the library before destructors are called
    AfxTermExtensionModule(ScoreDLL);
    }
    return 1; // ok
    }

  7. #7
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    re,
    cette macro ne fonctionne pas en statique lib ,reste en shared dll des 2 cotes
    programme + DLL .

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    j'ai rien compris

    je suis pas en shared DLL des deux côtés là??
    damned je suis perdu

Discussions similaires

  1. [MFC] Utilisation d'une palette de couleur
    Par Kevgeii dans le forum MFC
    Réponses: 2
    Dernier message: 01/06/2005, 17h35
  2. [MFC] Utilisation de la classe CSocket
    Par Sh4rk dans le forum MFC
    Réponses: 3
    Dernier message: 01/06/2005, 16h42
  3. [MFC]Utilisation d'un SLIDER , problème de conversion
    Par sylvain_c42 dans le forum MFC
    Réponses: 1
    Dernier message: 10/05/2005, 14h31
  4. [MFC] Utilisation de sockets
    Par keupon dans le forum MFC
    Réponses: 2
    Dernier message: 28/01/2004, 14h37
  5. [MFC] Utilisation Drivers
    Par LAPLACE dans le forum MFC
    Réponses: 4
    Dernier message: 21/12/2002, 10h29

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