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

Windows Discussion :

[winAPI C] Colorer individuellement les strings d'une listbox + associations fichiers


Sujet :

Windows

  1. #1
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut [winAPI C] Colorer individuellement les strings d'une listbox + associations fichiers
    Bonjour,

    En essayant de finir la prochaine (et finale) version d'un de mes projets, je rencontre plusieurs problèmes :

    • Comment colorer individuellement les strings d'une listbox ? Pour vous faire une idée, j'aimerais faire comme celle de WMP (vert = lecture, orange = corrompue). On m'a dit de la créer en ownerdraw mais vu le niveau de difficulté, n'y aurait il pas une méthode plus facile ? Sinon pouvez vous me donner un code simple l'illustrant ?
    • Pendant que je poste, j'aimerais aussi rendre transparent le fond de ma listbox (ayant un bitmap derrière). J'ai déjà posé plusieurs fois cette question mais sans résultats, malgré les efforts de pros ici même.
    • Ensuite et surtout, j'aimerais pouvoir lancer mon programme (à savoir un lecteur audio) à partir d'un clik droit sur un ou plusieurs fichiers (une sorte de "Lire avec truc" dans le menu déroulant) afin de l'ajouter ou les ajouter à la playlist (en utilisant un for de argv avec argc). J'ai vu que c'était dans HKEY_CLASSES_ROOT que cela se passait mais ne comprends pas comment faire. Auriez vous une idée ?


    Merci d'avance.
    Vive l'embarqué.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Bonjour,
    • Pour la couleur, tu devrais jeter un oeil sur CodeGuru, il me semble que tu peux y trouver des listbox spéciales pour cela.
    • Ben, je t'ai dit tout ce que je savais, je suis désolé de n'avoir pu t'aider davantage.
    • Au niveau des associations de fichiers, tu dois d'abord savoir certaines choses:
      • sous WinXP, HKEY_CLASSES_ROOT pointe sur deux clés: HKEY_LOCAL_MACHINE\Software\Classes et HKEY_CURRENT_USER\Software\Classes.
      • Tu n'as le droit d'écrire dans MACHINE ou ROOT que si tu es admin.
      • En cas de conflit d'association, j'ignore laquelle est prioritaire.
        Edit: HKEY_CURRENT_USER a la priorité.
      • La plupart du temps, les programmes d'installation installent toutes les associations dans HKEY_CLASSES_ROOT. L'explorateur modifie lui aussi HKEY_CLASSES_ROOT, c'est pourquoi on ne peut changer les associations dans l'eplorateur quand on est utilisateur.
      • Une association de fichier est en deux parties : La première associe une extension à un type (il peut y avoir plusieurs extensions associées au même type), la seconde définit le type.
      • En fouinant un peu avec RegEdit, tu peux voir qu'on peut assez facilement faire une association toute simple genre txt->"txtfile"->notepad.exe
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Citation Envoyé par kidpaddle2
    • Comment colorer individuellement les strings d'une listbox ? Pour vous faire une idée, j'aimerais faire comme celle de WMP (vert = lecture, orange = corrompue). On m'a dit de la créer en ownerdraw mais vu le niveau de difficulté, n'y aurait il pas une méthode plus facile ? Sinon pouvez vous me donner un code simple l'illustrant ?
    • Pendant que je poste, j'aimerais aussi rendre transparent le fond de ma listbox (ayant un bitmap derrière). J'ai déjà posé plusieurs fois cette question mais sans résultats, malgré les efforts de pros ici même.
    Il n'y a qu'en faisant un controle "ownerdraw" (pour les couleurs) ou bien en le "subclassant" (couleurs & bitmap de fond) que tu parviendras à tes fins.
    Sachant que la solution la plus simple est la première.

    Finalement, tu as presque le choix
    "La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."

    G. CLEMENCEAU

  4. #4
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    Merci à vous deux pour vos réponses rapides. Pour l'ownerdraw (je choisis celui ci parce que le subclassing m'est completement inconnu), j'irais voir sur codeguru...En ce qui conçerne les associations, j'ai beau chercher je ne vois pas du tout comment windows détermine quel programme utiliser pour l'extention donnée : Exemple : Dans HKEY_CURRENT_USER ou HKEY_LOCAL_MACHINE ->Software ->Classes ->.txt je ne vois que des infos inutiles (elles ne le sont pas mais je ne vois rien de spécial) et pas de chemin vers le programme à ouvrir. Rien que des filetype ou des "trucs bizarres" genre txt/plain etc...
    Pouvez vous éclairer ma lanterne ?
    Vive l'embarqué.

  5. #5
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    Citation Envoyé par Médinoc
    En fouinant un peu avec RegEdit, tu peux voir qu'on peut assez facilement faire une association toute simple genre txt->"txtfile"->notepad.exe
    Donc clé HKEY_CLASSES_ROOT\txtfile.
    L'itération est humaine; la récursion, divine.

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ah oui, je n'avais pas vu la OpenWithList.

    Dans l'entrée ".txt", en fait, seule la valeur par défaut est importante. Les sous-clés sont facultatives et n'existent pas pour toutes les extensions (d'ailleurs, il y a tout plein d'extensions qui n'ont pas de sous-clés) :
    Code HKEY_CLASSES_ROOT\.txt : Sélectionner tout - Visualiser dans une fenêtre à part
    (defaut) = "txtfile"

    Alors, on regarde au type txtfile.
    Là encore, il y a des trucs superflus (c'était bcp plus simple sous Win95 par exemple) aussi, je ne garde que l'essentiel:
    Code HKEY_CLASSES_ROOT\txtfile : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    (defaut) = "Document Texte"
    DefaultIcon
    	(defaut) = chemin de shell32.dll virgule n°d'icone (pour un .ico, ce numéro est zéro ou absent)
    shell
    	open
    		command
    			(defaut) = chemin de notepad.exe %1
    Tu fais la même chose pour ton type, et tu auras ton association.
    Et si tu n'as pas les droits pour HKEY_CLASSES_ROOT, tu prends HKEY_CURRENT_USER\Software\Classes à la place.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    Je comprends vaguement (dans HKEY_CURRENT_USER et LOCAL_MACHINE un filetype est précisé, et on doit chercher le dossier portant ce filetype comme nom dans HKEY_CLASS_ROOT pour donner le path de notre programme) mais comment dire ... cela change en fonction des fichiers enfin bon je n'ai compris que cela. Pourriez vous me donner la marche à suivre complete pour faire l'association si cela ne vous dérange pas ?

    [EDIT] Désolé je n'avais as vu ta réponse. Merci beaucoup tout s'éclaire
    [REEDIT] Au fait que signifie le "%1" ? devraus je l'utiliser aussi ?

    Merci d'avance.

    P.S. : J'ai du nouveau pour les autres problèmes : CodeGuru a toutes les réponses :
    listbox transparente :
    http://www.codeguru.com/cpp/controls...le.php/c10413/
    listbox ownerdraw avec individuals colors :
    http://www.codeguru.com/cpp/controls...cle.php/c1611/

    Le problème c'est que ces codes sont MFC ou C++ et que j'ai d'éjà vraiment du mal à les traduire en C dans ma tête mais après les intégrer à mon programme sera du scuicide. Ce site ne proposerais pas des sources C par hasard ?
    Vive l'embarqué.

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    %1, c'est employé en batch, ça veut dire "le premier argument".
    En l'occurence, il contient le nom du fichier à ouvrir.

    PS: Tu peux avoir besoin de le remplacer par "%1". Tu devras regarder avec un fichier situé dans un dossier avec des espaces pour voir si c'est nécessaire ou non.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    Je le mettrais tout le temps alors Conçernant ce %1 justement ... j'ai vu que quelqu'un avait eu un problème comme quoi l'association était faite mais que quand on ouvrait plusieurs fichiers, il ouvrait autant d'instances du programme en ouvrant qu'un fichier dans chaque. Y a t il un opérateur spécial à mettre pour que tous les fichiers se lancent dans la même instance ?

    [EDIT] Serait ce %L ?
    [REEDIT] J'oubliais...si l'utilisateur décide de remettre comme avant, comment puis-je accéder à sa requete ?
    Vive l'embarqué.

  10. #10
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    Aussi, je suis sen train d'essayer de faire accepter les double cliks à ma trayicon (en lui donnant le flag CS_DBLCLKS) mais celle ci décompose le double clik en 2 simples cliks... pour vous faire une idée : un clik restaure le programme et deux cliks affichent une messagebox. Or, en faisant un double clik dessus, l'icone va trop vite et se restaure dès le premier des deux. Comment faire pour y remédier s'il vous plait ?

    [EDIT] Désolé pour le post en trop je voulais éditer...
    Vive l'embarqué.

  11. #11
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    Up
    Vive l'embarqué.

  12. #12
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    N'y a t il personne qui puisse m'aider ? Je ne peux pas avancer sans tout ça ... et j'ai beau chercher je ne trouve rien.
    Vive l'embarqué.

  13. #13
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    • Bon. Je voudrais juste demander si, d'après les instructions de Médinoc, le diagramme permettant de programmer un fonction d'associations de fichier ressemblerait à cela (fichier joint). Merci de me dire si celui ci est correct.
    • Ensuite, quelqu'un pourrait me répondre conçernant la traduction des codes de codeguru (existent t elles ?) en C.
    • Et si vous savez comment récupérer un double clik sur une trayicon, vous pourriez me le dire svp ?


    Merci d'avance.
    Vive l'embarqué.

  14. #14
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ben, j'ai un peu de mal à comprendre ton algo...

    Et qu'est-ce que la condition "Effacer l'association" ? Une demande de l'utilisateur ?



    PS: Si j'ai bien compris, ton algo crée un type de fichier par extension.
    C'est un choix possible, l'autre étant de créer un seul type de fichier pour toutes (mais cela rend pratiquement impossible de modifier une association séparément des autres. Pour information, il me semble bien que WinAmp est passé de la seconde solution à la première)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  15. #15
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    Exact. En fait je voudrais faire une association avec les fichiers audio déjà existants dans HKEY_CLASS_ROOT mais comme j'aimerais que l'utilisateur puisse revenir en arrière au cas où il en aurait marre et revienne à WMP, j'ai inventé un système de copies.

    Bref, Supprimer l'association est choisi quand l'utilisateur en a marre d'associer ces extensions avec mon programme.

    Comprends tu mieux ? Est il bon ?
    Vive l'embarqué.

  16. #16
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    C'est un peu confus, mais ça a l'air bon.

    Note: Tu peux régler le (default) avec RegSetKeyValue().
    En fait, ce qu'il faut retenir, c'est qu'à la création, on ne met rien d'autre dans la clé "extension" que le nom de la clé "type". Le reste, c'est le remplissage de la clé "type" et pas mal de choses sont optionnelles.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  17. #17
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    Merci médinoc. Je considère alors le topic comme résolu, et si j'ai un problème j'en créerais un ce qui me permettra de poser mon problème plus précisément.
    Je pense que je vais aussi en faire un conçernant les ownerdraw... C'est vraiment la galère...

    Merci encore [RESOLU]
    Vive l'embarqué.

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

Discussions similaires

  1. [VBA]Problème avec les critères d'une recherche de fichier
    Par lucho013 dans le forum VBA Access
    Réponses: 3
    Dernier message: 16/04/2007, 23h40
  2. [VBA-E] compter les item d'une listbox
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/07/2006, 15h29
  3. 2 lignes les memes dans une listbox
    Par kalou26 dans le forum C++Builder
    Réponses: 9
    Dernier message: 20/06/2006, 16h03
  4. [VBA-E] Séparer les colonnes d'une listbox par des lignes?
    Par mulot03 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/05/2006, 14h03
  5. Réponses: 5
    Dernier message: 22/02/2006, 17h32

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