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

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    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.

  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

  4. #4
    Membre averti Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 63
    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).

  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

  6. #6
    Membre averti Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 63
    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

  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

  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

  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.

  11. #11
    Membre averti Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 63
    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, ...

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    HMENU tout court, sans étoile

    (HMENU est un typedef sur struct HMENU__ *)

  13. #13
    Membre averti Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 63
    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 !

  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

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    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).

  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

+ 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