comment fait on pour simuler un message comme : WM_CREATE ?
comment fait on pour simuler un message comme : WM_CREATE ?
salut,
il existe une fonction pour ça, je crois que c'est SendMessage(); et tu lui donne comme paramètre le message à envoyer, mais il faudrait confirmation.
Errare humanum est ... sed humanus naturae erratum est.
qu'est-ce que tu appeles par confirmation?
ben que quelqu'un d'autres confirme ou infirme ce que j'ai dit.
Errare humanum est ... sed humanus naturae erratum est.
je confirme
tu peux envoyer un SendMessage qui est bloquant
c'est à dire que lors que le traitement du message a été effectué on sort de Send Message
ou tu employer PostMessage qui fait la même chose mais n'est pas bloquant
Cordialement
vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
je vous en souhaite une excellente lecture ...
A lire : Les règles du forum
au faite les messages que veux faire executer : WM_CREATE et WM_PAINT ont deja été executer avant : la fenetre est deja creer et les images sont deja affiché.
mais je voudrais les envoyés de nouveaux car je veux afficher une autre image...
donc ma question est :
est-ce que c'est la meilleur facon d'afficher une autre image?
si ce n'est pas la meilleur, quelles sont les meilleurs facons?
Tu définie ton propre message ( WM_CHANGE_IMAGE par exemple) et tu passes en lParam le nom de l'image à afficher.
http://www.starnetasso.fr.st
http://www.multimania.com/xxkarlkoxxx
oki d'accord mais d'abord deux questions :
comment fait on pour definir son propre message?
comment le passe t on en lParam?
je sais que je suis chiant , mais c a cause que je suis un debutant...
WM_CREATE sert de constructeur. Il n'a pas à être reçu 2 fois.
WM_PAINT est un message particulier qui ne doit pas être envoyé à une appli. (Il faut envoyer un message qui provoque WM_PAINT, le mieux est de faire appel à InvalidateRect).
Peux-tu détailler comment est strcuturée ta fenêtre.
C'est toi qui la créé ? Comment t'y prends-tu pour afficher la première image ?
Pourquoi veuw-tu utiliser des messages ? Si tu t'en est passé pour afficher la première image, pourquoi t'en faut-il un pour en afficher une autre ?
1-non ce n'est pas moi qui l'ai creer, je me suis servis d'un exemple de dev-cpp
2-j'utilise le message WM_CREATE, suivi de WM_PAINT suivi d'une fonction qui affiche qui fait le reste
3-parce que je ne sais pas utiliser d'autre metode
4-je m'en suis pas passer pour afficher la premiere image, je me suis servis des messages WM_CREATE et WM_PAINT
Ok ok.
Je pense savoir comment est structuré ton programme :
- WM_CREATE créé une image qu'il stocke dans une variable
- WM_PAINT dessine cette image
Si c'est ainsi (le mieux est de poster du code), c'est très simple : tu déplace le code de création de l'image dans une fonction CreateMyImage que tu appelles dans WM_CREATE.
Quand tu veux la remplacer, tu détruit ton image et tu en créé une autre à l'aide de cette même fonction (qui peut accepter en argument un nom de fichier image). Pas besoin de toucher à WM_PAINT. Suffit de modifier la variable globale image.
est-ce que tu pourrais me faire un exemple, je t'envois mon code pour que tu me dise ou je devrait placer cette exemple :
voila
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145 #include <stdio.h> #include <windows.h> #include <conio.c> #pragma hdrstop static char g_szClassName[] = "MyWindowClass"; static HINSTANCE g_hInst = NULL; HBITMAP hb1,hb2,hb3,hb4,hb5,hb6; BITMAP bm[5]; int winX = 0, winY = 0, winfX = 900, winfY = 700, i, j, X, Y; int bx[] = {0, 663, 663, 663, 663}; int by[] = {0, 71, 142, 213, 526}; void DrawBall(HDC hdc) { HDC hdcMemory; hdcMemory = CreateCompatibleDC(hdc); SelectObject(hdcMemory, hb1); BitBlt(hdc, bx[0], by[0], bm[1].bmWidth, bm[1].bmHeight, hdcMemory, 0, 0, SRCAND); SelectObject(hdcMemory, hb2); BitBlt(hdc, bx[1], by[1], bm[2].bmWidth, bm[2].bmHeight, hdcMemory, 0, 0, SRCAND); SelectObject(hdcMemory, hb3); BitBlt(hdc, bx[2], by[2], bm[3].bmWidth, bm[3].bmHeight, hdcMemory, 0, 0, SRCAND); SelectObject(hdcMemory, hb4); BitBlt(hdc, bx[3], by[3], bm[4].bmWidth, bm[4].bmHeight, hdcMemory, 0, 0, SRCAND); SelectObject(hdcMemory, hb5); BitBlt(hdc, bx[4], by[4], bm[5].bmWidth, bm[5].bmHeight, hdcMemory, 0, 0, SRCAND); DeleteDC(hdcMemory); } LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch(Message) { case WM_CREATE: hb1 = LoadBitmap(g_hInst, "TITRE"); GetObject(hb1, sizeof(bm[1]), &bm[1]); hb2 = LoadBitmap(g_hInst, "BTSOLO"); GetObject(hb2, sizeof(bm[2]), &bm[2]); hb3 = LoadBitmap(g_hInst, "BTOPTIONS"); GetObject(hb3, sizeof(bm[3]), &bm[3]); hb4 = LoadBitmap(g_hInst, "BTCREDITS"); GetObject(hb4, sizeof(bm[4]), &bm[4]); hb5 = LoadBitmap(g_hInst, "BTQUITTER"); GetObject(hb5, sizeof(bm[5]), &bm[5]); break; case WM_PAINT: if(hb1 && hb2 && hb3 && hb4 && hb5) { PAINTSTRUCT ps; HDC hdcWindow; hdcWindow = BeginPaint(hwnd, &ps); DrawBall(hdcWindow); EndPaint(hwnd, &ps); } break; case WM_CHAR: switch (wParam) { default: break; } case WM_CLOSE: DestroyWindow(hwnd); break; case WM_DESTROY: DeleteObject(hb1); DeleteObject(hb2); DeleteObject(hb3); DeleteObject(hb4); DeleteObject(hb5); PostQuitMessage(0); break; default: return DefWindowProc(hwnd, Message, wParam, lParam); } return 0; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX WndClass; HWND hwnd; MSG Msg; g_hInst = hInstance; WndClass.cbSize = sizeof(WNDCLASSEX); WndClass.style = 0; WndClass.lpfnWndProc = WndProc; WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hInstance = g_hInst; WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); WndClass.hCursor = LoadCursor(NULL, IDC_ARROW); WndClass.hbrBackground = (HBRUSH)(COLOR_BTNFACE); WndClass.lpszMenuName = NULL; WndClass.lpszClassName = g_szClassName; WndClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if(!RegisterClassEx(&WndClass)) { MessageBox(0, "Window Registration Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL); return 0; } hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, g_szClassName, "A Bitmap Program", WS_OVERLAPPEDWINDOW, winX, winY, winfX, winfY, NULL, NULL, g_hInst, NULL); if(hwnd == NULL) { MessageBox(0, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL); return 0; } ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); while(GetMessage(&Msg, NULL, 0, 0)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return Msg.wParam; }
ca y est j'ai trouver une solution, mais le probleme c'est que j'arrive pas a rafraichir la fenetre pour afficher la nouvelle image ....
il y a-t-il une solution a ce probleme?
salut,
InvalidateRect() ne marche pas ?
Errare humanum est ... sed humanus naturae erratum est.
merci hypnos ca marche maintenant !
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