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 :

[C++] 2 petites questions sur l'API Windows


Sujet :

Windows

  1. #1
    Membre actif
    Avatar de Fabien Henon
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Points : 226
    Points
    226
    Par défaut [RESOLU] [C++] 2 petites questions sur l'API Windows
    Bonjour tout le monde, je suis en train de faire un petit programme avec l'API Windows et j'aurais 2 petites questions:

    - Comment est-ce que je peux mettre le fond d'une zone d'edition de texte qui est en readonly en blanc? Car la il y en gris.

    - J'ai une fenetre A propos qui est faite a partir des ressources et dont voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    APROPOS DIALOG
        CW_USEDEFAULT, CW_USEDEFAULT, 200, 120
            CAPTION "A propos de xChat"
            STYLE WS_OVERLAPPED
    BEGIN
        DEFPUSHBUTTON "Fermer", IDOK, 200/2 - 42/2, 120 - 5 - 12, 42, 12
        LTEXT "Texte de ma dialogue box.", -1, 5, 5, 190, 120 - 10 - 12
    END
    Et j'aimerais changer la police pour l'ecriture du texte "Texte de ma dialogue box." dans ma fenetre mais je ne sais pas comment faire

    Merci d'avance
    Soft Creations - FirmLife

    Soft Creations: Blog de Fabien Henon et site de prestations de sites web et applications mobiles
    FirmLife: Le nouveau jeu de gestion d'entreprises en ligne

  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
    1. Pour ça, ta fenêtre doit traiter le message WM_CTLCOLORSTATIC envoyé par l'EditBox Read-Only, et faire comme si c'était un WM_CTLCOLOREDIT à la place.
    2. Je ne crois pas qu'on puisse faire ça directement avec les ressources. Il faudra faire ça dans ton WM_INITDIALOG: CreateFont(), SendMessage(WM_SETFONT), etc.
    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 actif
    Avatar de Fabien Henon
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Points : 226
    Points
    226
    Par défaut
    Merci de ta réponse, par contre je suis assez débutant avec l'API Windows donc serait il possible que tu m'en dises plus sur ce que je dois faire (un peu plus de code si c'est possible)?

    Merci d'avance
    Soft Creations - FirmLife

    Soft Creations: Blog de Fabien Henon et site de prestations de sites web et applications mobiles
    FirmLife: Le nouveau jeu de gestion d'entreprises en ligne

  4. #4
    Membre averti Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Points : 442
    Points
    442
    Par défaut
    Voila un exemple de callback pour la dialog avec les deux traitements demandés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
      UNREFERENCED_PARAMETER(lParam);
    static HFONT hfont;
    switch (message)
      {
    case WM_INITDIALOG:
        hfont = CreateFont(20, 0, 0, 0, FW_NORMAL, 1, 0, 1, DEFAULT_CHARSET, 
          OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, 
          DEFAULT_PITCH | FF_ROMAN, "Arial");
        SendMessage( GetDlgItem(hDlg, IDC_STATIC1), WM_SETFONT, (WPARAM)hfont, 0);
      return (INT_PTR)TRUE;
      break;
    case WM_CTLCOLORSTATIC:
      if( lParam == (LPARAM)GetDlgItem(hDlg, IDC_EDIT1) )
        return DefWindowProc(hDlg, WM_CTLCOLOREDIT, wParam, lParam);
      break;
    case WM_COMMAND:
      if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
          EndDialog(hDlg, LOWORD(wParam));
        return (INT_PTR)TRUE;
        }
      break;
    case WM_CLOSE:
        DeleteObject(hfont);
      return (INT_PTR)TRUE;
      }
    return (INT_PTR)FALSE;
    }
    J'ai ajouté un edit read-only d'ID IDC_EDIT1 et j'ai changé l'ID du static pour la valeur IDC_STATIC1 (constantes à définir dans un header commun au fichier de ressource et au fichier de source).
    www.iristechnologies.eu
    Centre de formation à Paris et Toulouse

  5. #5
    Membre actif
    Avatar de Fabien Henon
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Points : 226
    Points
    226
    Par défaut
    Merci de ta reponse je comprends deja beaucoup mieux par contre j'ai un probleme avec les IDs.
    Pour mon edit box je n'ai aucun ID , voici son code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", "Bienvenue sur DDpop !",
                                    WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL | ES_AUTOVSCROLL | ES_READONLY,
                                    0, 0, 392, 170, hwnd, NULL, instance, NULL);
                wpOrigEditProc = (WNDPROC)SetWindowLong(hEdit, GWL_WNDPROC, (LONG)EditProc);
    Et pour la boite de dialogue c'est pareil, mon texte n'a pas d'ID, alors comment est-ce que je dois lui en mettre un?

    Merci d'avance
    Soft Creations - FirmLife

    Soft Creations: Blog de Fabien Henon et site de prestations de sites web et applications mobiles
    FirmLife: Le nouveau jeu de gestion d'entreprises en ligne

  6. #6
    Membre averti Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Points : 442
    Points
    442
    Par défaut
    En fait j'ai créé la dialog à partir d'une ressource RC :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    IDD_ABOUTBOX DIALOGEX 11, 11, 200, 120
    STYLE DS_SETFONT | WS_CAPTION
    CAPTION "A propos de xChat"
    FONT 8, "MS Sans Serif", 0, 0, 0x0
    BEGIN
        DEFPUSHBUTTON   "Fermer",IDOK,158,103,42,12
        LTEXT           "Texte de ma dialogue box.",IDC_STATIC1,5,5,190,98
        EDITTEXT        IDC_EDIT1,9,22,106,14,ES_AUTOHSCROLL | ES_READONLY
    END
    www.iristechnologies.eu
    Centre de formation à Paris et Toulouse

  7. #7
    Membre actif
    Avatar de Fabien Henon
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Points : 226
    Points
    226
    Par défaut
    Merci pour la police du texte ça fonctionne

    Par contre est-ce qu'il y a un moyen de faire mon edit box mais pas avec les ressources? Faire comme je l'ai fait et mettre le fond en blanc mais sans passer par les ressources?

    Merci d'avance
    Soft Creations - FirmLife

    Soft Creations: Blog de Fabien Henon et site de prestations de sites web et applications mobiles
    FirmLife: Le nouveau jeu de gestion d'entreprises en ligne

  8. #8
    Membre actif
    Avatar de Fabien Henon
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Points : 226
    Points
    226
    Par défaut
    Petit UP s'il vous plait
    Soft Creations - FirmLife

    Soft Creations: Blog de Fabien Henon et site de prestations de sites web et applications mobiles
    FirmLife: Le nouveau jeu de gestion d'entreprises en ligne

  9. #9
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Un contrôle c'est une fenêtre donc tu le crées avec CreateWindow (ou CreateWindowEx). Il doit avoir avoir le style WS_CHILD (généralement on spécifie également le style WS_VISIBLE afin de ne pas avoir à appeler ShowWindow), comme parent la fenêtre (ou la boîte de dialogue ...), et à la place du menu un simple entier qui sera son identifiant. La classe de fenêtre pour les contrôles edit est "EDIT". Pour personnaliser ensuite ton edit tu traite le message WM_CTLCOLOREDIT ... est-ce que c'est ce que tu cherchais?

  10. #10
    Membre actif
    Avatar de Fabien Henon
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Points : 226
    Points
    226
    Par défaut
    Merci de ta reponse c'est bien ce que je cherchais par contre j'ai une erreur de compilation, en fait j'essaie de mettre comme tu le dis l'ID de l'edit a la place du menu dans la fonction CreateWindowEx, mais j'ai une erreur a la compilation:

    "main.cpp:86: error: invalid conversion from `int' to `HMENU__*'
    main.cpp:86: error: initializing argument 10 of `HWND__* CreateWindowExA(DWORD, const CHAR*, const CHAR*, DWORD, int, int, int, int, HWND__*, HMENU__*, HINSTANCE__*, void*)'"

    Merci d'avance de votre aide.
    Soft Creations - FirmLife

    Soft Creations: Blog de Fabien Henon et site de prestations de sites web et applications mobiles
    FirmLife: Le nouveau jeu de gestion d'entreprises en ligne

  11. #11
    Membre averti Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Points : 442
    Points
    442
    Par défaut
    il suffit de caster :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ..., (HMENU*)IDC_EDIT1, ...
    www.iristechnologies.eu
    Centre de formation à Paris et Toulouse

  12. #12
    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
    HMENU tout court, sans étoile

    (HMENU est un typedef sur struct HMENU__ *)
    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.

  13. #13
    Membre averti Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Points : 442
    Points
    442
    Par défaut
    Bien vu !
    pan sur le bec !
    www.iristechnologies.eu
    Centre de formation à Paris et Toulouse

  14. #14
    Membre actif
    Avatar de Fabien Henon
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Points : 226
    Points
    226
    Par défaut
    En effet un cast suffisait, par contre rien n'a change

    Voici le code de création de mon edit box
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", "Bienvenue sur DDpop !",
                                    WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL | ES_AUTOVSCROLL | ES_READONLY,
                                    0, 0, 392, 170, hwnd, (HMENU)IDC_EDIT1, instance, NULL);
                wpOrigEditProc = (WNDPROC)SetWindowLong(hEdit, GWL_WNDPROC, (LONG)EditProc);
    Et voici la fonction callback de cet edit box:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    LRESULT APIENTRY EditProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
       switch(uMsg)
       {
          case WM_NCHITTEST:
          {
             LRESULT retour = CallWindowProc(wpOrigEditProc, hwnd, WM_NCHITTEST, wParam, lParam);
             switch(retour)
             {
                case HTLEFT:
                case HTRIGHT:
                case HTBOTTOM:
                case HTTOP:
                case HTBOTTOMRIGHT:
                case HTBOTTOMLEFT:
                case HTTOPRIGHT:
                case HTTOPLEFT:
                    return (HTBORDER);
    
                default:
                    return (CallWindowProc(wpOrigEditProc, hwnd, WM_NCHITTEST, wParam, lParam));
             }
          }
          return FALSE;
    
          case WM_CTLCOLORSTATIC:
                if (lParam == (LPARAM)GetDlgItem(hwnd, IDC_EDIT1))
                    return DefWindowProc(hwnd, WM_CTLCOLOREDIT, wParam, lParam);
            break;
    
          default:
            return (CallWindowProc(wpOrigEditProc, hwnd, uMsg, wParam, lParam));
       }
    }
    Merci d'avance de votre aide
    Soft Creations - FirmLife

    Soft Creations: Blog de Fabien Henon et site de prestations de sites web et applications mobiles
    FirmLife: Le nouveau jeu de gestion d'entreprises en ligne

  15. #15
    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
    Pour changer la couleur d'une EditBox, il ne faut pas la subclasser: Le traitement de WM_CTLCOLOREDIT doit se faire dans la classe parent (c'est l'EditBox qui envoie automatiquement un message WM_CTLCOLOREDIT à son parent).
    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.

  16. #16
    Membre actif
    Avatar de Fabien Henon
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Points : 226
    Points
    226
    Par défaut
    Merci beaucoup ca fonctionne.

    Merci de votre patience et de vos reponses.
    Sujet resolu
    Soft Creations - FirmLife

    Soft Creations: Blog de Fabien Henon et site de prestations de sites web et applications mobiles
    FirmLife: Le nouveau jeu de gestion d'entreprises en ligne

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

Discussions similaires

  1. Quelque petite question sur Windows 8
    Par Dragsteur dans le forum Windows 8
    Réponses: 2
    Dernier message: 28/01/2013, 01h00
  2. [OpenGL] Petite question sur l'API
    Par Fabien Henon dans le forum OpenGL
    Réponses: 7
    Dernier message: 16/01/2008, 23h27
  3. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 15h28
  4. quelques petites questions sur les windows form
    Par natasha84 dans le forum C++/CLI
    Réponses: 22
    Dernier message: 25/05/2006, 22h14
  5. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 13h49

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