Rajoute le style ES_NUMBER à ton editbox, et tu n'auras pas à t'inquiéter d'espaces: L'editbox n'acceptera que des nombres.
Version imprimable
Rajoute le style ES_NUMBER à ton editbox, et tu n'auras pas à t'inquiéter d'espaces: L'editbox n'acceptera que des nombres.
bonjour
c'est à propos du UDM_SETBUDDY
dans le WM_CREATE je mets ceci :mon 1er paramètre doit être faux mais je n'arrive pas à savoir oùCode:SendMessage(ID_UPDOWN, UDM_SETBUDDY, (WPARAM)ID_EDITBOX_3, 0);
puis après dans le WM_COMMAND cette fonction est appelée :
quand je compile il met ceci :Code:
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); } } }
'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
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:
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*/ );
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
Compare ton code et le mien, en regardant la doc des fonctions, tu devrais comprendre.
ça c'est à cause des pointeurs
ça m'a grillé tous mes neurones
moi c'est une chose à la fois seulement ;)
Il n'y a pas de pointeur dans mon code.
:D non c'est pas ça je faisais allusion au sujet sur les pointeurs du forum C
je ne voulais pas être pointé du doigt :D ;)
bonne soirée
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 :ensuite dans le WM_COMMAND j'appelle une fonction à l'intérieur de laquelle je mets ceci :Code:
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);
ici j'ai simplifié le code au maximum pour tester mon contrôle updownCode:
1
2
3
4
5
6
7 switch(iId) { case ID_UPDOWN: { MessageBox(fenetrePrincipale,lpMessage,"",MB_OK); } }
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
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?
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
dommage que la doc sur les updown control soit si rare et pas en français
Voici un code fait en une vingtaine de minutes:
Apparemment, il manquait juste le style UDS_SETBUDDYINT.Code:
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); } } }
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
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 fonctionCode:void TestUpDown(void)
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
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.Code:void TestUpDown()
Donc, je prends le réflexe de toujours mettre void quand une fonction ne prend pas de paramètres du tout.
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
ça y est voilà !
j'ai fait avec 2 simples pushbutton et ça marche
pas besoin d'utiliser UDM_SETBUDDY : juste penser à mettre :m'a-t-on ditCode:
1
2 sprintf(bufw, "%d", weight); SetDlgItemText(fenetrePrincipale, ID_EDITBOX_3, bufw);
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 ?
Tes marque-pages Firefox (ou tes favoris IE) peut-être?