Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : EDITBOX [ Archives / API ] (timy94)

mardi 21 mars 2006 à 10:36:18 | EDITBOX

timy94

Mon problème est le suivant:
Je voudrais compter le nombre de changement de valeur dans un EditBox
Le problème c'est que WM_COMMAND, est  envoyé par Windows au moins trois fois pour un valeur rentrée au clavier dans un EditBox particulier.
J'ai essayé WM_ACTIVATE, n'est pas envoyé par Windows quand je clic et je rentre une valeur dans mon EditBox..
j'ai essayé KILLFOCUS, ça marche mais je pers le focus pour toute la suite du programme et je n'accède plus à mon EditBox.

Dans mon programme je capture l'EditBox concerné car j'en ai plusieurs dans mon apli,.par case WM_COMMAND: je n'affiche qu'un caractere en effaçant si plus d'un caractere et j'ai créé ma fenêtre de travail et mes EditBox, par VisualC++ V5.

Donc comment récuperer un seule fois le "Operation.Unit.ResClic++" de mon programme quand celui-ci est modifié par l'utilisateur.


MERCI


Ci-joint mon programme pour diagnostique.

#include <windows.h>
#include "resource.h"
HINSTANCE  hInst   = NULL;   // instance du programme

struct Base {
 int         res; //Résultat
 int         ResClic; //Resultat non cliqué    = 0 sinon = 1
 int     ResVide; //Resultat non renseigné = 0 sinon = 1
} ;
 
struct TAB {
 int     NbErreur;
 struct Base Unit; //Unité
} ;

struct TAB Operation;  //Structure de l'opération en cours

//Prototypage
int CALLBACK DialogProc (HWND , UINT , WPARAM , LPARAM );

/**********************************************************************************/

int CALLBACK DialogProc (HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam) {

    //Handle commun
    HFONT hfontDlg;    // Font for dialog text 
 
    static char Res_U  [2] = "";

    switch (message) {
    case WM_INITDIALOG:
      {
         hfontDlg = CreateFont(48,0,0,0,700,FALSE,FALSE,0,0,0,0,0,0,"Arial");
         SendMessage  (GetDlgItem (hwndDlg, IDC_EDIT1) , WM_SETFONT, (WPARAM)hfontDlg,(LPARAM)TRUE);

         hfontDlg = CreateFont(24,0,0,0,700,FALSE,FALSE,0,0,0,0,0,0,"Arial");
         SendMessage  (GetDlgItem (hwndDlg, IDC_NB_ERREUR), WM_SETFONT, (WPARAM)hfontDlg,(LPARAM)TRUE);

         Operation.NbErreur = 0;
         Operation.Unit.ResClic = 0;
         SetWindowText(GetDlgItem(hwndDlg, IDC_NB_ERREUR),"0");
      }
 
    case WM_COMMAND:
        {
               HDC  hdc  = (HDC)  wParam;
               HWND hwnd = (HWND) lParam;

               i f (GetFocus() == GetDlgItem(hwndDlg, IDC_EDIT1)) {
                      GetWindowText    (GetDlgItem(hwndDlg, IDC_EDIT1), Res_U, 3); 
                      if (strlen(Res_U)!=0 ) {
                             Operation.Unit.ResClic++;   //Compte les changements
                             Operation.Unit.ResVide = 1;
                             if(strlen(Res_U)>1) {
                                       Res_U[1] = '\0'; // Pas plus de 1 caractères
                                        SetWindowText(GetDlgItem(hwndDlg, IDC_EDIT1),Res_U); 
                             }
                      } else { 
                            Operation.Unit.ResVide = 0;
                          Operation.Unit.ResClic = 0;
                      } 
                      Operation.Unit.res = atoi (Res_U);
                }  
    
               switch (LOWORD (wParam)) {
               case IDOK:
               case IDCANCEL:
                      {
                                EndDialog(hwndDlg, 0);
                                return TRUE;
                                break;
                      }
               } //Find switch (LOWORD)
               break;
         } //Fin de WM_COMMAND
         break;
   } //Fin de switch (message)
    return 0;
}

/******************************************************************/

/******************************************************************/
/*****************  Fonction WinMain  *****************************/
/******************************************************************/
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)

    //Allouer de la mémoire pour notre dialog template:
    LPDLGTEMPLATE lpdt = ( LPDLGTEMPLATE) GlobalAlloc(GPTR, 512);
    if (!lpdt) return 1;   
    // Définir les propriétés de la boite de dialogue:
    lpdt->style = DS_CENTER | WS_POPUP | WS_MINIMIZEBOX| WS_SYSMENU | DS_MODALFRAME | WS_CAPTION;
    lpdt->x = lpdt->y  = 0;  lpdt->cx = 230; lpdt->cy = 155;        
    //Lancer la boite de dialogue
    DialogBox (hInst, MAKEINTRESOURCE (IDD_DIALOG1), NULL, DialogProc);

    //Libération de la mémoire allouée:
    GlobalFree((HGLOBAL)lpdt);
    //Retour:
    return 0;
}


Timy94


mardi 21 mars 2006 à 13:15:36 | Re : EDITBOX

NeoUmbrella

Salut, as tu essayé en sous classant l'editbox et en récupérant le message WM_CHAR ?

NeoUmbrella Corp.

vendredi 24 mars 2006 à 23:19:34 | Re : EDITBOX

Sparow

soit tu sous-classes ton edit et tu traites le msg WM_CHAR, soit, et je pense que c'est plus simple, tu traites le msg EN_CHANGE... comme ceci : (dans la mainwndproc) case WM_COMMAND: if(HIWORD(wParam) == EN_CHANGE && (HWND)lParam == hEdit/*HWND de ton edit*/) { // un caractère a changé dans hEdit } //suite du traitement de WM_COMMAND



Cette discussion est classé dans : wm, editbox, operation, res, unit


Répondre à ce message

Sujets en rapport avec ce message

editbox et couleur [ par julienbj ] Malgré une lecture des différentes sources et réponses sur le sujet, je n'arrive toujours pas à réaliser ce que je veux!Je suis en train de faire une Faire perdre le focus d'une editbox [ par Mastersam ] Bonjour, j'ai un léger soucis, je voudrais faire perdre le focus d'une edit box pour récuperer sa valeur après l'appui sur la touche entrer.J'ai essay Sous classement editbox [ par julienbj ] Je cherche à sous classer une editbox pour modifier son affichage. Je sous classe donc le message WM_PAINT pour pouvoir modifier l'apparence de l'edit Editbox et taille de caracteres [ par SnOOpss ] Bonjour j'ai un probleme avec les editbox. J'ai créé une editbox, j'ai changé sa police avec WM_SETFONT mais maintenant j'ai des problemes d affichage Recuperation valeur editbox [ par fredsor ] Bonjour,Je cherche a recupere la valeur d'une editbox, mais ca me revnoi que le premier caractere a chaque fois?J'essaye avec GetWindowText, et aussi Regions sur editbox [ par waganono ] Bonjour Je voudrai créer des editbox arrondis en C (API win32, pas de MFC),  le problème est que je n'arrive pas à placer mon code au bonendroit appar Faire avancer une bar de progression régulièrement: problème... [ par by_rabbit_08 ] Bonjour!J'ai un tout petit problème avec une progressbar... bizar non?Enfait, je voudrais qu'elle s'affiche toute seule lors de l'ouverture d'une boit message WM_PAINT [ par spiky31 ] BonjourJe m'excuse si ca semble une question de debutant mais c'est la premiere fois que je dessine dans une fenetre windows :(Je me suis rendu compte Boite de dialogue et WM_KEYDOWN [ par solidsnake88 ] Bonjour à tous, juste une question a propos de l'interception de WM_KEYDOWN par une boite de dialogue qui possede des controles a l'interieur. J' probleme (segmentation) d'execution d'un thread [ par krusty24 ] salut tout le monde j'ai besoin de votre aide pour m'aider a resoudre un petit probleme d'execution de mon programme en C-ANSI ce programme permet de


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.