bonjour,
je suis entrain de faire un bloc note en api win 32 et j'ai un problème pour dire à quelle ligne et quelle position se trouve le curseur,
si vous avez des fonctions, des idées.. je suis preneur
merci
bonjour,
je suis entrain de faire un bloc note en api win 32 et j'ai un problème pour dire à quelle ligne et quelle position se trouve le curseur,
si vous avez des fonctions, des idées.. je suis preneur
merci
Bonjour,
Tu devrais trouver ton bonheur avec le message EM_LINEFROMCHAR ...
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.
oui, mais j'ai un problème pour utiliser la fonction;
.
Code : Sélectionner tout - Visualiser dans une fenêtre à part lResult = SendMessage(hwnd,EM_LINEFROMCHAR, wParam,(LPARAM) lParam);
et j'ai déclarer plutôt lresult avec un int.
mais je n'ai rien qui se passe.
voilà en entier:
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
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 #include <windows.h> HINSTANCE hinst; LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hwnd; MSG msg; WNDCLASS wc; hinst = hinstance; wc.style = 0 ; wc.lpfnWndProc = MainWndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hinstance; wc.hIcon = NULL; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = NULL; wc.lpszMenuName = NULL; wc.lpszClassName = "MaWinClass"; if(!RegisterClass(&wc)) return FALSE; hwnd = CreateWindow("MaWinClass", "Titre", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, NULL, hinstance, NULL); if (!hwnd) return FALSE; ShowWindow(hwnd, nCmdShow); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } /******************************************************************************/ LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { HWND hEdit; int lResult; switch (uMsg) { case WM_CREATE: hEdit =CreateWindow("edit", "Texte", WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL, 10, 10, 200, 400, hwnd, NULL, hinst, NULL); lResult = SendMessage(hwnd,EM_LINEFROMCHAR, wParam,(LPARAM) lParam); return 0; case WM_SIZE: MoveWindow(hEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } }
donc voilà si vous pouvez m'aidez,
merci
Tu codes au hasard, visiblement, non ?
- hEdit n'est pas préservé d'un appel à l'autre, et ton EditBox n'a pas d'ID: Tu n'auras donc aucun moyen d'agir sur ton editbox par la suite.
- Le SendMessage doit se faire sur l'EditBox
- Et il ne se fait pas avec les WPARAM et LPARAM de la fenêtre : Il se fait avec ceux que TU veux lui passer. L'un d'eux devra sans doute être le résultat d'un message EM_GETSEL...
- Et pour les trucs beaucoup moins importants:
- Le style de code de ta WindowProc me déplait. Je suis plutôt un adepte du SESE (Single Entry, Single Exit) quand j'écris une WindowProc...
- Et le code n'est pas TCHAR-compliant, non plus...
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.
sérieusement c'est la première fois que je suis en face de send message, je connais du tout pas la fonction, si y a pas un tutoriel qui l'explique ou ...
je sais j'ai fait un peu au n'importe quoi :s ...
C'est le genre de choses qui devrait être à la base de tout tutoriel sur WinAPI:
- On donne la formule magique qui affiche une fenête "Hello World"
- On explique la formule pour qu'elle ne soit plus magique:
- On explique ce qu'est une WNDCLASS
- On explique le système de messages de Windows
- On explique la façon dont les fenêtres se dessinent.
SendMessage() utilisé pour une fenêtre ou contrôle dans le même thread, ça ne fait rien de plus compliqué qu'un appel de fonction: Tout simplement, ça appelle la WindowProc du contrôle avec les paramètres que tu veux.
Et la WindowProc des contrôles EDIT sait traiter le message EM_GETSEL, et elle le traite de la façon écrite dans la doc...
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.
OK, et comment faire pour l'id de l'edit box ???
après il resteras plus qu'à associer sendmsg avec id edit box.
On lui passe l'ID à la création, dans le paramètre hMenu (il faut un cast).
Seules les fenêtres avec le style WS_CHILD peuvent avoir un id, et seules les fenêtres sans le style WS_CHILD peuvent avoir un menu, c'est comme ça que la fonction CreateWindow() fait la différence.
Généralement, on commence les ids à partir de 1000. Ne me demande pas pourquoi...
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.
donc ça me donne ça avec ws_child:
et après avec ça, qu'est ce qu'on fait ?
c'est quoi la param hMenu ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 hEdit =CreateWindow("edit", "Texte", WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL, 5, 5, 350, 250, hwnd, NULL, hinst, NULL);
et comment transmettre l'ID dans l'edit box et dans le sendmsg...
merci
T'arrive-t-il de lire l'aide ?
Et si jamais à un moment tu as besoin du HWND de ton Edit, tu utilises la fonction GetDlgItem().
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #define IDC_MONEDIT 1000 ... hEdit = CreateWindow(TEXT("edit"), TEXT("Texte"), WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL, 5, 5, 350, 250, hwnd, (HMENU)IDC_MONEDIT, NULL, NULL );
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.
re c'est deja mieu compris,
mais j'ai un problème dans la compilation:
je vois du tout pas l'erreur, peut tu me l'indiquer ?
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
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 #include <windows.h> #include<stdio.h> #define IDC_MONEDIT 1000 HINSTANCE hinst; LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hwnd; MSG msg; WNDCLASS wc; hinst = hinstance; wc.style = 0 ; wc.lpfnWndProc = MainWndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hinstance; wc.hIcon = NULL; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = NULL; wc.lpszMenuName = NULL; wc.lpszClassName = "MaWinClass"; if(!RegisterClass(&wc)) return FALSE; hwnd = CreateWindow("MaWinClass", "Titre", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, NULL, hinstance, NULL); if (!hwnd) return FALSE; ShowWindow(hwnd, nCmdShow); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } /******************************************************************************/ LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { HWND hEdit; int lResult, lResult2; switch (uMsg) { case WM_CREATE: hEdit = CreateWindow(TEXT("edit"), TEXT("Texte"), WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL, 5, 5, 350, 250, hwnd, (HMENU)IDC_MONEDIT, NULL, NULL ); lResult = SendMessage(hwnd,EM_LINEFROMCHAR,0,0); sprintf(lResult2, "ligne %d",lResult); MessageBox(hwnd,lResult2,"Résultat", MB_OK); return 0; case WM_SIZE: MoveWindow(hEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } }
merci
Si tu pouvais préciser quelles sont les erreurs de compil en question...
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.
Au début de la MainWndProc, tu déclares en int la variable lResult2 que tu utilises ensuite dans un sprintf !
Il te faut une variable chaine de caractères.
www.iristechnologies.eu
Centre de formation à Paris et Toulouse
voilà c'est bon mais ça m'indique toujours la valeur 0:
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 LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { HWND hEdit; char lResult2[20]; int lResult; switch (uMsg) { case WM_CREATE: hEdit = CreateWindow(TEXT("edit"), TEXT("Texte"), WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL, 5, 5, 350, 250, hwnd, (HMENU)IDC_MONEDIT, NULL, NULL ); return 0; case WM_COMMAND: switch(LOWORD(wParam)) { case IDM_NEW: lResult = SendMessage(IDC_MONEDIT,EM_LINEFROMCHAR,0,0); sprintf(lResult2, "ligne %d",lResult); MessageBox(hwnd,lResult2,"Résultat", MB_OK); return 0;
je comprends pas pourquoi il m'indique toujours 0 !!
si vous voyez l'erreur...
merci
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager