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 :

Mise a jour caption d'un controle


Sujet :

MFC

  1. #1
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Points : 43
    Points
    43
    Par défaut Mise a jour caption d'un controle
    Bonjour,

    Je cherche a savoir ce que font les petits lutins au fond de la cave pour mettre a jour le texte d'un controle quand on fait un :

    SetDlgItemTextW(this->m_hWnd,IDC_STATIC, szBuf);

    Est-ce qu'ils utilisent DrawItem, TextOut, ... ? et donc les devices context ??

    En remontant les appels successifs, je reste bloqué sur un SetWindowText dans les objets OLE ...

    Et arrétez moi si je me trompe, mais étant donné que la plupart des contrôles sont une forme spécialisée de CWnd (en MFC), je dois pouvoir utiliser les mêmes api pour les manipuler qu'une CWnd ?


    Merci de votre aide
    Et surtout ne changez rien ... ce site est une mine d'or !!

  2. #2
    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,
    au dela de :: SetDlgItemTextW tu ne verras rien ...
    puisque c'est directement l'api 32.
    maintenant comment elle agit ,logiquement (je n'en ai pas la preuve)
    je repondrai par oui a ta question sur l'utilisation des dc et de drawtext etc..
    oui toutes les fonctions de base de CWnd sont applicables sur un contrôle.
    la classe CWnd est le socle commun a toutes les fenêtres MFC.

  3. #3
    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
    Win32 propose de base les fonctions SetDlgItemText(), SetDlgItemInt() et SetWindowText().

    On peut supposer que les deux premières utilisent la troisième.

    Pour les objets OLE, par contre...

  4. #4
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Points : 43
    Points
    43
    Par défaut
    Merci de vos réponses

    bon, je ne suis pas tout seul dans le désert, ça me rassure ...

    En fait ce besoin de savoir est motivé par un projet unicode qui ne l'est pas vraiment ... je m'explique ..
    J'ai une app MFC ANSi existante, avec pas mal de lignes de codes, du Driver, des hooks, des accès au système de fichier, à la registry et tout un tas de moulinettes ... Et on me demande de faire évoluer cette appli pour afficher d'autres langues que celles prises en charge actuellement (toutes basées sur des glyphs latins) et en particulier l'arabe et le chinois ... fiou ... ca se complique pour moi.

    J'ai deux choix, soit passer l'appli en full Unicode ... quelques milles erreurs à la compil et encore le compilo dans sa grande bonté s'arrête au bout d'un moment de cracher des insultes, OU deuxième solution (qui me plait beaucoup plus) me débrouiller pour ne gérer des scripts unicodes que pour l'interface. (je n'ai que très peu d'entrée utilisateurs sur l'interface)

    Donc je cherche maintenant à comprendre comment se fait la mise a jour du texte d'un contrôle dans l'api win32, pour mettre en place mes propres fonctions d'échanges (DDX_TEXTW) et SetDlgItemTextW(). S'il n'y avait que le chinois ça ne poserait aucun pb, mais je dois aussi gérer les langues arabes qui comportent des ligatures assez complexes à mettre en oeuvre. Et DrawItem, me gere tout ca correctement (et surtout très simplement), d'où le besoin de savoir l'utiliser sur un bon nombre de contrôles.

    Si vous des suggestions elles sont les bienvenues .. (je commence ma carrière de programmeur, et sur ce coup la tâche me parait rude mais le sujet me plaît bien)

  5. #5
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Points : 43
    Points
    43
    Par défaut
    Bon, voici un bout de code ... je ne comprends pas ce qui ne fonctionne pas.
    Je ne dois pas utiliser les fonctions correctement, est-ce que MFC m'empeche de faire ce genre de traitement ... un peu d'aide serait la bienvenue, je cale !

    Donc voici le bout de code en question :

    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
     
    	font = CreateFont(14, 0, 0, 0,
    		FW_NORMAL, FALSE, FALSE, FALSE,
    		DEFAULT_CHARSET, OUT_CHARACTER_PRECIS,
    		CLIP_DEFAULT_PRECIS, PROOF_QUALITY,
    		VARIABLE_PITCH | FF_SWISS,
    		TEXT("Microsoft Sans Serif"));
     
    	ret = ::GetClientRect (GetDlgItem(IDC_STATIC)->m_hWnd, &rect) ;
    	hdc = ::GetDC(GetDlgItem(IDC_STATIC)->m_hWnd);
     
    	hGdiObj = SelectObject(hdc, font);
     
            // Avec buffer contenant des caracteres arabes
    	retDraw = DrawTextW (hdc, buffer, wcslen(buffer), rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
     
    	DeleteObject((HGDIOBJ)font);
     
    	::ReleaseDC(GetDlgItem(IDC_STATIC)->m_hWnd,hdc);

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

Discussions similaires

  1. Mise à jour d'un list control
    Par TDDev dans le forum Windows
    Réponses: 0
    Dernier message: 26/06/2009, 07h16
  2. Databinding sur des controles - problème de mise a jour
    Par boby62423 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 31/03/2009, 09h52
  3. Mise a jour de controle utilisateur dans une forme
    Par pascalwick dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/12/2008, 15h53
  4. Mise a jour des control avant affichage
    Par kacedda dans le forum MFC
    Réponses: 3
    Dernier message: 28/03/2007, 13h56
  5. problème de mise a jour des controls
    Par samalive dans le forum MFC
    Réponses: 8
    Dernier message: 25/03/2007, 01h16

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