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

Visual C++ Discussion :

Gestion de fenêtres sous windows XP


Sujet :

Visual C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 24
    Points : 16
    Points
    16
    Par défaut Gestion de fenêtres sous windows XP
    Salut, j'ai le problème suivant qui se pose, et je n'en viens pas à bout :

    Comment mettre 2 zones de texte, séparées et toutes les 2 visibles en même temps, dans une même fenêtre parent ? Parce que celà fonctionne très bien avec 1 seule fenêtre de classe "edit", mais quand j'essaye d'en mettre plus, celà ne marche pas...

    Merci;

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Poste ton code parce que normallement, il n'y a pas de problème, c'est prévu pour (et même 3 champs edit si tu veux)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Le programme, en gros, c'est msn, sauf que les 2 ordis qui discutent sont directement reliés. ( Je voulais comprendre comment celà fonctionnait, du coup, j'ai essayé ^^ ). Donc, en gros, c'est un serveur, d'où le send() dans la procédure.

    Voici le code des 2 fonctions qui gerrent la fenêtre en question:
    Création de la fenêtre:
    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
    35
    36
    #include "stdafx.h"
    #include "dynamicServer.h"
     
    extern HINSTANCE hInst;
    extern int ShowWin;
    extern HWND hwnd;
     
    HWND CreateMainWindow(){
        WNDCLASS wc;
        HMENU hMenu, hSousMenu;
     
        wc.style = 0 ;
        wc.lpfnWndProc = MainWndProc;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = hInst;
        wc.hIcon = NULL;
        wc.hCursor = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground = 0;
        wc.lpszMenuName =  NULL;
        wc.lpszClassName = "MyWinClass";
     
        if(!RegisterClass(&wc)) return FALSE;
     
        hSousMenu = CreateMenu();
        AppendMenu(hSousMenu, MF_STRING, IDM_SEND, "Envoyer");
        hMenu  = CreateMenu();
        AppendMenu(hMenu,MF_POPUP,(UINT)hSousMenu,"Fichier");
     
        hwnd = CreateWindow("MyWinClass", "Sending", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, MAXWINX, MAXWINY, NULL, hMenu, hInst, NULL);
     
        if (!hwnd)  return FALSE;
        ShowWindow(hwnd, ShowWin);
     
        return hwnd;
    }
    Et celui de la procédure (Mais je ne sais pas comment gerrer ça pour que les 2 zones de texte soient visible, et qu'on puisse ajuster leur taille avec une double flèche. Ca doit être tout con, mais bon, je débute ):

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    #include "stdafx.h"
    #include "dynamicServer.h"
     
    extern SOCKET sock;
    extern HWND hEdit1, hEdit2;
    extern HWND hEditOut;
    extern HINSTANCE hInst;
    extern char sending[];
    extern HWND hwnd1, hwnd2;
    extern char buffer[5];
    extern char message[255];
    extern int i;
     
    LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
     
        switch (uMsg)
        {
            case WM_CREATE:
            {
    	hEdit1 = CreateWindow("edit", "Tappez votre message ici, puis faites Fichier/Envoyer.", WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL, 0, 0, 0, 0, hwnd, NULL, hInst, NULL);
    	hEdit2 = CreateWindow("edit", "", WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL, 0, 0, 0, 0, hwnd, NULL, hInst, NULL);
    	return 0;
            }
     
            case WM_SIZE:
            {
                 MoveWindow(hEdit1, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
    	MoveWindow(hEdit2, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
                return 0;
            }
     
            case WM_DESTROY:
            {
                PostQuitMessage(0);
                return 0;
            }	
     
            case WM_COMMAND:
            {
    	if((LOWORD(wParam)) == IDM_SEND){
    	        int lengh = GetWindowText(hEdit1, sending, (MSGMAXSIZE-2));
    	        sending[lengh]='\n';
    	        lengh++;
    	        sending[lengh]='\0';
    	        send(csock, sending, lengh, 0);
    			}
            }
            default:
    	return DefWindowProc(hwnd, uMsg, wParam, lParam);
        }
    }

    Et tant que j'y suis, comment faire pour effacer le contenu d'une zone de texte, et pour écrire dans une zone de texte... Y a-t-il une fonction du même genre que fprintf() mais pour les fenêtre ? Ou autre chose ?

    Merci.

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    C'est normal, tu créées tes fenêtres avec la même position (0,0) et une taille nulle (0, 0).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    hEdit1 = CreateWindow("edit", "Tappez votre message ici, puis faites Fichier/Envoyer.", WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL, 10, 10, 500, 20, hWnd, NULL, hInst, NULL);
    hEdit2 = CreateWindow("edit", "2nd fenetre", WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL, 10, 50, 500, 20, hWnd, NULL, hInst, NULL);
    Autre chose, tu déclares 2 variables "HWND hEdit1, hEdit2" comme extern mais jamais tu ne les définies (ou tu n'as pas mis le code)

  5. #5
    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,
    ton projet ce n'utilise pas les MFC mais win32...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Merci pour l'explication et l'exemple, désolé, je commence à peine avec les fenêtres un peu évoluées, donc, j'ai encore du mal à ne pas merder .

    Pour les variables définies en extern et les MFC, si, je les utilise, mais je n'ai mis là que la partie du code qiu posait problème ( sinon, j'avais 8 fichiers plus les ressources xD ).

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Avec ton code, j'ai en effet mes 2 fenètres distinctes, mais j'ai 2 problèmes :

    1°) le "2eme fenètre" est affiché là où se trouve la première, c'est à dire hors de la zone de texte.

    2°) d'autre part, les 2 zones ne sont pas délimitées... ce que j'aimerais, ce serait un affichage de ce type ( avec possibilité de changer la taille => regarder la souris ):
    Voir ce lien

    Merci de votre aide.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/01/2010, 15h32
  2. Gestion de Processus sous Windows
    Par m.david dans le forum Threads & Processus
    Réponses: 11
    Dernier message: 21/10/2007, 23h33
  3. Gestion des ports sous windows
    Par wass dans le forum Windows
    Réponses: 1
    Dernier message: 19/04/2006, 17h44
  4. gestion de fichier sous windows en posix
    Par fan² dans le forum Réseau
    Réponses: 11
    Dernier message: 07/12/2005, 18h40
  5. Routines de gestion des ports sous Windows XP
    Par wiccanhelios dans le forum Windows
    Réponses: 2
    Dernier message: 14/11/2003, 08h02

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