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 averti
    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
    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
    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 averti
    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
    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
    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 averti
    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
    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 averti
    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
    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 averti
    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
    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
    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 averti
    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
    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