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

Windows Discussion :

action updown control


Sujet :

Windows

  1. #21
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Rajoute le style ES_NUMBER à ton editbox, et tu n'auras pas à t'inquiéter d'espaces: L'editbox n'acceptera que des nombres.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  2. #22
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Rajoute le style ES_NUMBER à ton editbox
    oui je l'ai déjà fait depuis quelques temps

    très pratique d'ailleurs

    et du coup c'est vrai que les lignes de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if britrate == ' '
    britrate = 0
    sont inutiles

  3. #23
    Invité
    Invité(e)
    Par défaut
    bonjour

    c'est à propos du UDM_SETBUDDY

    dans le WM_CREATE je mets ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SendMessage(ID_UPDOWN, UDM_SETBUDDY, (WPARAM)ID_EDITBOX_3, 0);
    mon 1er paramètre doit être faux mais je n'arrive pas à savoir où

    puis après dans le WM_COMMAND cette fonction est appelée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    VOID NotificationControle(HWND fenetrePrincipale,UINT message, WPARAM wParam, LPARAM lParam)
    {
    switch(iId)
        {	    
    (...)		
    		case ID_UPDOWN:
    			{			
    			weight = weight - 16;
    			_stprintf(bufw, TEXT("%d"), weight);
    			}
        }	
    }
    quand je compile il met ceci :
    'warning: passing arg 1 of `SendMessageA' makes pointer from integer without a cast'

    une question qui me tourmente : un contrôle updown a une flèche haut et une flèche bas.

    comment lui dire : augmente de 16 quand je clique haut et diminue de 16 quand je clique bas ?

    merci d'avance

  4. #24
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Tu as encore confondu HWND et ID. Deux fois.
    Pour le second, tu dois mettre le HWND de l'Editbox, pas son ID!

    Pour le premier, tu peux contourner le problème en utilisant SendDlgItemMessage() à la place de SendMessage() : SendDlgItemMessage() accepte l'ID du contrôle.

    Cela nous donne:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SendDlgItemMessage(
     fenetrePrincipale, /*HWND de ta fenêtre*/
     ID_UPDOWN,         /*ID du contrôle UpDown*/
     UDM_SETBUDDY,      /*N° de message*/
     (WPARAM)GetDlgItem(fenetrePrincipale, ID_EDITBOX_3), /*HWND de l'Editbox, obtenu à partir de son ID.*/
     0                  /*rien du tout*/
     );
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #25
    Invité
    Invité(e)
    Par défaut
    encore désolé de vous embêter mais qu'entendez-vous par "pour le second" et "pour le premier"

    désolé mais je n'ai pas compris

  6. #26
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Compare ton code et le mien, en regardant la doc des fonctions, tu devrais comprendre.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #27
    Invité
    Invité(e)
    Par défaut
    ça c'est à cause des pointeurs

    ça m'a grillé tous mes neurones

    moi c'est une chose à la fois seulement

  8. #28
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Il n'y a pas de pointeur dans mon code.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #29
    Invité
    Invité(e)
    Par défaut
    non c'est pas ça je faisais allusion au sujet sur les pointeurs du forum C
    je ne voulais pas être pointé du doigt

    bonne soirée

  10. #30
    Invité
    Invité(e)
    Par défaut
    bonjour

    donc si je comprend bien, cela sert à déclarer comme buddy l'editbox

    c'est fait

    mais je me retrouve face à un autre petit souci :

    dans le WM_CREATE je crée mon editbox comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    hupdown=CreateWindowEx(      
        0,
        UPDOWN_CLASS,
        NULL,
        WS_CHILD|WS_VISIBLE,
        10+290,
        10+163,
        40,
        40,
        fenetrePrincipale,
        (HMENU)ID_UPDOWN,
        instance,
        NULL);
    ensuite dans le WM_COMMAND j'appelle une fonction à l'intérieur de laquelle je mets ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    switch(iId)
        {
                            case ID_UPDOWN:
    			{			
    			MessageBox(fenetrePrincipale,lpMessage,"",MB_OK);
    			}
        }
    ici j'ai simplifié le code au maximum pour tester mon contrôle updown

    or quand je clique il n'y a aucune messagebox qui apparaît

    ce qui me choque : le ID_UPDOWN ne différencie pas flèche haut et flèche bas du contrôle

  11. #31
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    C'est peut-être un WM_NOTIFY qu'il envoie au lieu d'un WM_COMMAND. C'est beaucoup plus complexe à gérer. Es-tu sûr que le "buddy" ne marche pas sans que tu y touches?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #32
    Invité
    Invité(e)
    Par défaut
    bonjour

    j'ai passé un très bon week-end... dommage seulement qu'il ait plu mais bon...

    pour en revenir au sujet,

    j'ai pourtant bien respecté ce que vous avez dit

    mais comme je l'ai dit lors de mon post précédent, pour les boutons habituels il y a le case : on clique sur le bouton et pouf ! il fait une action

    tandis que l'updown control est composé de 2 boutons : haut et bas

    ce qui me choque c'est que j'ai écrit le case ID_UPDOWN : peut-être qu'il ne réagit pas car il faut qu'on lui précise : lorsque je clique flèche haut tu ajoutes 16 et lorsque je clique flèche bas tu retires 16

    ça ne peut pas être une histoire de paramètres car les warnings concernant ceci ont bel et bien disparu

    de plus je déclare bien l'UDM_SETBUDDY dans le WM_CREATE

  13. #33
    Invité
    Invité(e)
    Par défaut
    dommage que la doc sur les updown control soit si rare et pas en français

  14. #34
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Voici un code fait en une vingtaine de minutes:
    Code C : 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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    #include <windows.h>
    #include <commctrl.h>
    #include <tchar.h>
     
    #pragma comment(lib, "comctl32.lib")
     
    #define IDC_EDIT1 10001
    #define IDC_UPDOWN1 10002
     
    LRESULT CALLBACK TestUpDownWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    	LRESULT ret = 0;
    	switch(uMsg)
    	{
    	case WM_CREATE:
    		{
    		HWND hEdit = CreateWindowEx(0, _T("EDIT"), _T("42"), ES_NUMBER|WS_BORDER|WS_VISIBLE|WS_CHILD, 20, 20, 80, 20, hWnd, (HMENU)IDC_EDIT1, NULL, NULL);
    		HWND hUpDown = CreateWindowEx(0, UPDOWN_CLASS, _T("UpDown1"), WS_VISIBLE|WS_BORDER|WS_CHILD|UDS_SETBUDDYINT, 120, 20, 20, 20, hWnd, (HMENU)IDC_UPDOWN1, NULL, NULL);
    		SendDlgItemMessage(hWnd, IDC_UPDOWN1, UDM_SETBUDDY, (WPARAM)hEdit, 0);
    		}
    		break;
    	case WM_DESTROY:
    		PostQuitMessage(0);
    		break;
    	default:
    		ret = DefWindowProc(hWnd, uMsg, wParam, lParam);
    		break;
    	}
    	return ret;
    }
     
    void TestUpDown(void)
    {
    	{
    		INITCOMMONCONTROLSEX icx = {0};
    		icx.dwSize = sizeof icx;
    		icx.dwICC = ICC_UPDOWN_CLASS;
    		//#ifdef ICC_STANDARD_CLASSES
    		//icx.dwICC |= ICC_STANDARD_CLASSES;
    		//#endif
    		if(!InitCommonControlsEx(&icx))
    		{
    			DWORD err = GetLastError();
    			MessageBox(NULL, _T("Échec de InitCommonControlsEx()"), NULL, MB_OK);			
    			return;
    		}
    	}
    	{
    		WNDCLASSEX wcx = {0};
    		wcx.cbSize = sizeof wcx;
    		wcx.hbrBackground = (HBRUSH)(COLOR_3DFACE+1);
    		wcx.hCursor = LoadCursor(NULL, IDC_ARROW);
    		wcx.hInstance = GetModuleHandle(NULL);
    		wcx.lpfnWndProc = TestUpDownWndProc;
    		wcx.lpszClassName = _T("TestUpDown");
    		wcx.style = CS_HREDRAW|CS_VREDRAW;
    		if(!RegisterClassEx(&wcx))
    		{
    			MessageBox(NULL, _T("Échec de RegisterClassEx()"), NULL, MB_OK);
    			return;
    		}
    	}
     
    	{
    		HWND hWnd = CreateWindowEx(0, _T("TestUpDown"), _T("Test contrôle UpDown"),
    		 WS_OVERLAPPEDWINDOW|WS_VISIBLE,
    		 CW_USEDEFAULT, 0, 320, 240, NULL, NULL, GetModuleHandle(NULL), NULL
    		 );
    		MSG msg;
    		if(hWnd==NULL)
    		{
    			MessageBox(NULL, _T("Échec de CreateWindowEx()"), NULL, MB_OK);
    			return;
    		}
    		else
    			ShowWindow(hWnd, SW_SHOWNORMAL);
     
    		while(GetMessage(&msg, NULL, 0, 0)>0)
    		{
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    		}
    	}
    }
    Apparemment, il manquait juste le style UDS_SETBUDDYINT.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  15. #35
    Invité
    Invité(e)
    Par défaut
    bonjour

    merci pour le code c'est sympa

    de mon côté j'ai demandé et un developpeur de doom9 m'a dit qu'on pouvait s'arranger pour obtenir la position du curseur : si la position est inférieure à la première alors c'est la flèche bas

    apparement il faut jeter un oeil au source de DGIndex : au niveau de la boîte de dialogue "Luminance"

    je vais voir pour les 2

  16. #36
    Invité
    Invité(e)
    Par défaut
    bonjour à tous,

    juste une petite question toute bête à propos du code que vous avez fait :A quoi sert le 'void' entre parenthèses, que signifie-t-il ? Jusqu'ici j'avais vu qu'on mettait VOID pour créer une fonction

    je ne comprend pas bien. merci de m'apporter quelques lumières là-dessus.

    EDIT : finalement j'ai décidé de faire différemment : je vais remplacer l'updown crée par deux push buttons que je disposerai comme l'updown mais à la place il y aura '+' et '-'

    il me semble que c'est plus sage et moins compliqué pour moi pour le moment

    ce qui n'empêche que je revienne dessus plus tard
    Dernière modification par Invité ; 11/11/2009 à 19h17.

  17. #37
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par gizmo27 Voir le message
    bonjour à tous,

    juste une petite question toute bête à propos du code que vous avez fait :A quoi sert le 'void' entre parenthèses, que signifie-t-il ? Jusqu'ici j'avais vu qu'on mettait VOID pour créer une fonction

    je ne comprend pas bien. merci de m'apporter quelques lumières là-dessus.
    C'est une base du C, ça.

    Dans la définition d'une fonction, c'est équivalent à ceci:
    Mais quand on fait une simple déclaration, il y a une différence subtile: Si on oublie de préciser void, le C traite ça comme une fonction qui accepte n'importe quoi comme paramètres. (on dit que la fonction est déclarée, mais n'a pas de prototype). Et c'est pas bien.
    Donc, je prends le réflexe de toujours mettre void quand une fonction ne prend pas de paramètres du tout.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  18. #38
    Invité
    Invité(e)
    Par défaut
    merci pour l'info

    j'en prend note

    mais je ne savais pas : ça ne figure pas sur mes vieux cours d'infos... comme quoi

  19. #39
    Invité
    Invité(e)
    Par défaut
    ça y est voilà !
    j'ai fait avec 2 simples pushbutton et ça marche
    pas besoin d'utiliser UDM_SETBUDDY : juste penser à mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sprintf(bufw, "%d", weight);
    SetDlgItemText(fenetrePrincipale, ID_EDITBOX_3, bufw);
    m'a-t-on dit

    j'avais une question : puisque tous les topics que j'ai postés font partie d'un seul et même projet,
    n'y aurait-il pas un endroit où je pourrais les rassembler et les stocker : pour y revenir dessus plus tard sans être obligé de chercher le topic qui s'est "noyé" dans le forum ?

  20. #40
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Tes marque-pages Firefox (ou tes favoris IE) peut-être?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Appeler une action via controller::action() ?
    Par Khleo dans le forum MVC
    Réponses: 2
    Dernier message: 20/02/2013, 17h38
  2. equivalent updown control pour Linux
    Par Invité dans le forum Linux
    Réponses: 1
    Dernier message: 31/03/2010, 10h34
  3. Variables communes aux actions du controller
    Par Louis-Guillaume Morand dans le forum Zend Framework
    Réponses: 2
    Dernier message: 25/09/2007, 23h34
  4. Faire une action sur Control + C
    Par bluecurve dans le forum Langage
    Réponses: 1
    Dernier message: 20/07/2006, 00h19

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