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

MFC Discussion :

[win32 CEdit] Des problèmes, encore des problèmes ...


Sujet :

MFC

  1. #1
    Kyn
    Kyn est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 17
    Points : 12
    Points
    12
    Par défaut [win32 CEdit] Des problèmes, encore des problèmes ...
    Bonjour,

    depuis que j'ai tenté de me mettre à la programmation win32, je n'arrete pas de buter sur des problèmes avec Visual

    au début, je cherchais à adapter un projet win32 console application vers un win32 application ... j'ai vite compris que ce serait pas facile !

    alors souhaitant avant tout afficher du texte dans une fenêtre, je me suis mis en tête de travailler sur les CEdit ! et bien, c'est pas de tout repos pour comprendre le fonctionnement de ces bestioles !

    j'arrive à afficher une ligne de texte à l'intérieur, à l'aide de la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetDlgItemText(Dlg,IDC_SRVLOG,"Hello World !!\r\n");
    mais bon, une ligne c'est bien, mais si je peux en écrire plusieurs, c'est mieux, alors j'ai vu dans la FAQ C++ ce morceau de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CString str ,strLine;
    for(int i=0 ;i<10 ;i++)
    {
         str.Format("ligne numéro :%d \r\n" ,i) ;
         strLine+=str ;
    }
    GetDlgItem(IDC_EDIT1)->SetWindowText(strLine);
    mais Visual (C++ 6.0) me dit que la fonction GetDlgItem prend deux arguments ... alors je lui rajoute un argument de type HWND en premier paramètre et voilà le travail:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    error C2039: 'SetWindowTextA' : is not a member of 'HWND__'
    c:\program files\microsoft visual studio\vc98\include\windef.h(195) : see declaration of 'HWND__'
    SetWindowTextA() alors que moi j'utilise SetWindowText() tout court ...

    je vais finir par craquer

  2. #2
    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
    Points : 16 075
    Points
    16 075
    Par défaut
    GetDlgItem est utilisé avec un seul paramètre lorsqu'il est membre de la classe CWnd (ou d'une dérivée), sinon il faut effectivement lui passer le handle
    SetWindowTextA est l'alias classique de SetWindowText, pour l'unicode c'est SetWindowTextW, ca ne pose pas de problème

    Vérifie à quel endroit, dans quelle classe tu utilises GetDlgItem

  3. #3
    Kyn
    Kyn est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    je l'utilise dans ma procédure CALLBACK. Je donne le code entier, tu pourras peut être mieux juger:

    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
    #include <afxwin.h>
    #include "resource.h"  // Pour utiliser les ressources
     
     
    // Prototype de notre fonction
    LRESULT CALLBACK MainProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam);
     
     
    // Rien de spécial ici
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
     	DialogBox(hInstance,(LPCTSTR)IDD_MAIN,NULL,(DLGPROC)MainProc);
    	return 0;
    }
     
    // Procédure de gestion de la boite de dialogue
    LRESULT CALLBACK MainProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam)
    {
    	int Select;
    	switch(message)
    	{
    	case WM_COMMAND:
    		Select=LOWORD(wParam);
    		switch(Select)
    		{
    		case IDC_RUNSRV:
    			//SetDlgItemText(Dlg,IDC_SRVLOG,"Hello World !!\r\n");	
    			GetDlgItem(Dlg, IDC_SRVLOG)->SetWindowText(_T("Hello World !!\r\n"));
     
    			return TRUE;
    		case IDOK:
    			EndDialog(Dlg,0);
    			return TRUE;
    		case IDCANCEL:
    			EndDialog(Dlg,Select);
    			return TRUE;
    		}
    	default:
    		return FALSE;
    	}
    }
    j'ai du mal à comprendre le fonctionnement, vraiment
    en fait, j'aimerai qu'il soit utilisé lorsque je clique sur un bouton (ID : IDC_RUNSRV) !

    win32 console application, c'est plus simple

  4. #4
    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
    Points : 16 075
    Points
    16 075
    Par défaut
    Citation Envoyé par Kyn
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GetDlgItem(Dlg, IDC_SRVLOG)->SetWindowText(_T("Hello World !!\r\n"));
    }
    je verrais plutot un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetWindowText(GetDlgItem(Dlg, IDC_SRVLOG),"Hello World !!\r\n");

  5. #5
    Kyn
    Kyn est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    merci merci merci !!

    bon çà produit le même résultat que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetDlgItemText(Dlg,IDC_SRVLOG,"Hello World !!\r\n");
    c'est donc qu'il faut que je récupère les données à l'intérieur du CEdit en premier lieu et que je concatène !

    jvais tester

  6. #6
    Kyn
    Kyn est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    yes, j'ai réussi à faire çà tout seul :o

    voici le code pour ceux que çà interesse !
    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
    LRESULT CALLBACK MainProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam)
    {
    	HWND hCtrl;
    	char buf[128] = {'\0'};
    	CString str;
    	int Select;
    	switch(message)
    	{
    	case WM_COMMAND:
    		Select = LOWORD(wParam);
    		switch(Select)
    		{
    		case IDC_RUNSRV:
    			hCtrl = GetDlgItem(Dlg, IDC_SRVLOG);
    			GetWindowText(hCtrl, buf, 127);
    			str += strcat(buf, "Hello World !!\r\n");
    			SetWindowText(hCtrl, str);
     
    			return TRUE;
    		case IDOK:
    			EndDialog(Dlg,0);
    			return TRUE;
    		case IDCANCEL:
    			EndDialog(Dlg,Select);
    			return TRUE;
    		}
    	default:
    		return FALSE;
    	}
    }
    ptite question cependant: je déclare une chaine de 512 char, vaut-il mieux que je dise au GetWindowText d'en récupérer 512 ou 511 (pour le \0) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char buf[512] = {'\0'};
    (...)
    GetWindowText(hCtrl, buf, 511);
    je dirais 511 ...

  7. #7
    Kyn
    Kyn est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    yes, j'ai réussi à faire çà tout seul :o

    voici le code pour ceux que çà interesse !
    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
    LRESULT CALLBACK MainProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam)
    {
    	HWND hCtrl;
    	char buf[512] = {'\0'};
    	CString str;
    	int Select;
    	switch(message)
    	{
    	case WM_COMMAND:
    		Select = LOWORD(wParam);
    		switch(Select)
    		{
    		case IDC_RUNSRV:
    			hCtrl = GetDlgItem(Dlg, IDC_SRVLOG);
    			GetWindowText(hCtrl, buf, 511);
    			str += strcat(buf, "Hello World !!\r\n");
    			SetWindowText(hCtrl, str);
     
    			return TRUE;
    		case IDOK:
    			EndDialog(Dlg,0);
    			return TRUE;
    		case IDCANCEL:
    			EndDialog(Dlg,Select);
    			return TRUE;
    		}
    	default:
    		return FALSE;
    	}
    }
    ptite question cependant: je déclare une chaine de 512 char, vaut-il mieux que je dise au GetWindowText d'en récupérer 512 ou 511 (pour le \0) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char buf[512] = {'\0'};
    (...)
    GetWindowText(hCtrl, buf, 511);
    je dirais 511 ...

  8. #8
    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
    Points : 16 075
    Points
    16 075
    Par défaut
    Citation Envoyé par Kyn
    ptite question cependant: je déclare une chaine de 512 char, vaut-il mieux que je dise au GetWindowText d'en récupérer 512 ou 511 (pour le \0) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char buf[512] = {'\0'};
    (...)
    GetWindowText(hCtrl, buf, 511);
    je dirais 511 ...
    Il faut donner la taille du buffer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char buf[TAILLE];
    GetWindowText(hCtrl, buf, TAILLE);
    donc 512

  9. #9
    Kyn
    Kyn est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    merci bien

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

Discussions similaires

  1. Probléme positionnement des DIV (image du problém)
    Par badway dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 18/10/2007, 09h32
  2. Problème dans des "IF" avec des chaines de caractères
    Par lanysteph dans le forum Langage
    Réponses: 4
    Dernier message: 16/11/2006, 11h37
  3. Problème avec des listes et des variables
    Par Knuckles dans le forum Général Python
    Réponses: 3
    Dernier message: 09/05/2006, 18h24
  4. Réponses: 3
    Dernier message: 10/12/2005, 19h56
  5. Réponses: 9
    Dernier message: 25/09/2005, 16h33

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