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

C++/CLI Discussion :

remplir un winform listview depuis du code c++ non managé


Sujet :

C++/CLI

  1. #1
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut remplir un winform listview depuis du code c++ non managé
    Bonjour.

    Débutant dans les winforms, je m'interroge sur les limites du mixage code managé/non managé en C++.

    L'intérêt des winforms, c'est de développer des interfaces graphiques très rapidement, et l'intérêt de mixer ce code avec du C++ non managé, c'est de réutiliser des composants tout fait et de continuer à développer dans le langage que je maîtrise le mieux.


    J'ai donc créé un winform basique avec une listview.

    Ensuite, j'ai une classe C++ non managée, donc compilée avec les :

    #pragma unmanaged et #pragma managed.



    Cette classe exécute un thread qui devra remplir la winform listview à intervalles réguliers.
    (C'est la winform qui instanciera la classe C++ non managée).

    Est-ce qu'il y a vraiment moyen de réaliser ceci.

    Il est par exemple impossible de passer en paramètre d'une méthode de cette classe, une référence sur la listview (à cause des pragmas ...).

    Merci pour toutes informations.

  2. #2
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Re.

    Une idée comme ça:

    La classe compilée en natif pourrait utiliser PostMessage(...); afin d'avertir la fenêtre principale de l'application que la listview doit être updater.

    Il sera alors facile de remplir la listview en interrogeant la classe non managée et en "marshallant" les chaînes de caractères.

    Seul souci, pour l'instant, c'est que dans "events handlers", on ne trouve que des évenements liés au clic de souris, resize de la fenêtre, etc... Quelle est la méthode pour intercepter des messages de type WM_USER (message définit par l'utilisateur).


    (je viens de trouver ceci : http://msdn2.microsoft.com/fr-fr/lib...oc(vs.80).aspx )

    Cette méthode ci-dessus fonctionne pour moi. Juste que pour retrouver la fenêtre depuis le code non managé, un FindWindow ne marche pas, j'ai utilisé EnumWindows. (je n'ai pas non plus trouver comment passer le handle de la fenêtre managée à la classe non managée, d'ailleurs je ne suis même pas sur d'avoir trouver le handle tout cours : System::Windows::Forms::handle ???).

  3. #3
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    c'est résolu ou pas ? sous un système comme xp, l'utilisation des handles peut prendre tout son sens, et les messages en winforms fonctionnent comme avec l'api win32
    sous vista, les handles n'ont plus d'avenir.

    Pour récuperer le handle de ta form, il faut utiliser l'objet instancié et récuperer sa propriété Handle

  4. #4
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Oui c'est résolu, parce que j'utilise "PostMessage" en trouvant le handle avec "EnumWindows", j'ai juste trouver une solution de contournement.

    Mais il aurait été intéressant de savoir si je pouvais passer le handle de la form à la classe non managée (en espérant bien sûr que la valeur de ce handle ne change pas). J'avoue ne pas savoir comment faire: si quelqu'un a une idée, je prends, sinon ce n'est pas primordial.

  5. #5
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    tu peux de la facon dont j'ai décrit, et en marshallant l'intptr en handle

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Winform c# dans un programme C++ non managé
    Par bdurtaut dans le forum C++/CLI
    Réponses: 3
    Dernier message: 05/11/2007, 10h10
  2. remplir image.picture depuis le code
    Par jadey dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 10/08/2006, 01h07
  3. [C#] Simuler clic depuis du code
    Par Trollusc@ius dans le forum ASP.NET
    Réponses: 13
    Dernier message: 16/08/2005, 10h43
  4. [JS] Appeler du code C# depuis du code JS
    Par DontNet dans le forum ASP.NET
    Réponses: 3
    Dernier message: 05/05/2005, 19h00
  5. Réponses: 4
    Dernier message: 25/01/2005, 22h14

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