-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy path_tut25.html
265 lines (256 loc) · 21.2 KB
/
_tut25.html
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Iczelion">
<meta name="GENERATOR" content="Mozilla/4.7 [en] (Win98; I) [Netscape]">
<title>Iczelion's Win32asm Tutorial 25: Simple Bitmap</title>
</head>
<body STYLE="#text-align:justify;" text="#FFFFFF" bgcolor="#000000" link="#FFFF00" vlink="#C0C0C0" alink="#C0FFC0">
<center>
<h1>
<font face="Arial,Helvetica"><font color="#FFFF99">Tutorial 25: Un Simple
Bitmap</font></font></h1></center>
<font face="Arial,Helvetica"><font size=-1>Dans ce tutorial, nous allons voir comment utiliser des bitmaps dans notre programme. Pour être exact, nous allons apprendre à afficher un bitmap dans le secteur client de notre fenêtre.<BR>Downloadez <a href="files/tut25.zip">l'exemple</a>.</font></font>
<h3>
<font face="Arial,Helvetica"><font color="#FFCC33">Théorie</font></font></h3>
<font face="Arial,Helvetica"><font size=-1>Les simples sont de simples images stockées dans l'ordinateur. Il y a beaucoup de formats d'images utilisés pour les ordinateurs, mais à l'origine Windows ne traitait qu'uniquement les fichiers Graphiques (.bmp). Les Bitmaps dont nous allons parler dans ce tutorial sont des bitmap Windows *.bmp. La plus simple façon d'utiliser un bitmap est de l'employer en tant que ressource. Il y a deux façons pour faire ça. Vous pouvez inclure le bitmap dans un fichier de définition de ressource (.rc) comme suit :</font></font>
<br>
<blockquote><font face="Arial,Helvetica">#define IDB_MYBITMAP
100</font>
<br><font face="Arial,Helvetica">IDB_MYBITMAP <b><font color="#FFFF99">BITMAP</font></b>
"c:\project\example.bmp"</font></blockquote>
<font face="Arial,Helvetica"><font size=-1>Cette méthode emploie une constante pour représenter le bitmap. La première ligne crée juste une constante nommé IDB_MYBITMAP qui pour valeur 100. Nous utiliserons ce label (ce nom) pour nous référer à ce bitmap dans le programme. La ligne suivante déclare un bitmap ressource. On indique au compilateur de ressource à quel endroit retrouver le fichier bmp réel.</font></font>
<br><font face="Arial,Helvetica"><font size=-1>L'autre méthode utilise un nom pour représenter le bitmap comme suit :</font></font>
<blockquote><font face="Arial,Helvetica">MyBitMap <b><font color="#FFFF99">BITMAP</font></b>
"c:\project\example.bmp"</font></blockquote>
<font face="Arial,Helvetica"><font size=-1>Cette méthode exige que vous vous référiez au bitmap dans votre programme grâce au nom "MyBitMap" au lieu d'une valeur.</font></font>
<br><font face="Arial,Helvetica"><font size=-1>L'unes ou l'autres de ces méthodes restent excellentes tant que vous sachiez bien quelle méthode vous employez.</font></font>
<br><font face="Arial,Helvetica"><font size=-1>Maintenant que nous avons placé le bitmap dans le fichier ressource, nous pouvons continuer les étapes de l'explication pour afficher ce bitmap dans le secteur client de notre fenêtre.</font></font>
<ol>
<li>
<font face="Arial,Helvetica"><font size=-1>Appelez LoadBitmap pour obtenir l'handle du bitmap. LoadBitmap possède le prototype de fonction suivant :</font></font></li>
</ol>
<ol>
<ol><b><font face="Arial,Helvetica">LoadBitmap proto hInstance:HINSTANCE, lpBitmapName:LPSTR</font></b></ol>
<p><br><font face="Arial,Helvetica"><font size=-1>Cette fonction renvoie l'handle du bitmap. hInstance est l'instance handle de notre programme. LpBitmapName est un pointer qui est sur la châine de caractères qui définit le nom du bitmap (dans le cas où vous employez la deuxième méthode pour se référer au bitmap). Si vous employez une constante pour vous référer au bitmap (comme IDB_MYBITMAP), vous pouvez mettre sa valeur ici. (Dans l'exemple au-dessus, ce serait 100). Voici un court exemple:</font></font>
<ol>
<br><font face="Arial,Helvetica"><font size=-1>First Method:</font></font>
<p><font face="Arial,Helvetica"><font size=-1>.386</font></font>
<br><font face="Arial,Helvetica"><font size=-1>.model flat, stdcall</font></font>
<br><font face="Arial,Helvetica"><font size=-1>................</font></font>
<br><font face="Arial,Helvetica"><font size=-1>.const</font></font>
<br><font face="Arial,Helvetica"><font size=-1>IDB_MYBITMAP
equ 100</font></font>
<br><font face="Arial,Helvetica"><font size=-1>...............</font></font>
<br><font face="Arial,Helvetica"><font size=-1>.data?</font></font>
<br><font face="Arial,Helvetica"><font size=-1>hInstance dd ?</font></font>
<br><font face="Arial,Helvetica"><font size=-1>..............</font></font>
<br><font face="Arial,Helvetica"><font size=-1>.code</font></font>
<br><font face="Arial,Helvetica"><font size=-1>.............</font></font>
<br><font face="Arial,Helvetica"><font size=-1> invoke
GetModuleHandle,NULL</font></font>
<br><font face="Arial,Helvetica"><font size=-1> mov hInstance,eax</font></font>
<br><font face="Arial,Helvetica"><font size=-1>............</font></font>
<br><font face="Arial,Helvetica"><font size=-1> invoke
LoadBitmap,hInstance,IDB_MYBITMAP</font></font>
<br><font face="Arial,Helvetica"><font size=-1>...........</font></font>
<p><font face="Arial,Helvetica"><font size=-1>Second Method:</font></font>
<p><font face="Arial,Helvetica"><font size=-1>.386</font></font>
<br><font face="Arial,Helvetica"><font size=-1>.model flat, stdcall</font></font>
<br><font face="Arial,Helvetica"><font size=-1>................</font></font>
<br><font face="Arial,Helvetica"><font size=-1>.data</font></font>
<br><font face="Arial,Helvetica"><font size=-1>BitmapName db "MyBitMap",0</font></font>
<br><font face="Arial,Helvetica"><font size=-1>...............</font></font>
<br><font face="Arial,Helvetica"><font size=-1>.data?</font></font>
<br><font face="Arial,Helvetica"><font size=-1>hInstance dd ?</font></font>
<br><font face="Arial,Helvetica"><font size=-1>..............</font></font>
<br><font face="Arial,Helvetica"><font size=-1>.code</font></font>
<br><font face="Arial,Helvetica"><font size=-1>.............</font></font>
<br><font face="Arial,Helvetica"><font size=-1> invoke
GetModuleHandle,NULL</font></font>
<br><font face="Arial,Helvetica"><font size=-1> mov hInstance,eax</font></font>
<br><font face="Arial,Helvetica"><font size=-1>............</font></font>
<br><font face="Arial,Helvetica"><font size=-1> invoke LoadBitmap,hInstance,addr BitmapName</font></font>
<br><font face="Arial,Helvetica"><font size=-1>...........</font></font></ol>
<BR><BR><BR>Pour info: un '<FONT COLOR="#FFFF00">contexte de dispositif</FONT>' c'est en quelque sorte la zone blanche principale de votre fenêtre sur laquelle on affichera le dessin bitmap. Elle est réelle quand on parle d'une page physiquement afficher sur notre écran. Mais on peut aussi se le réprésenter comme une page fictive n'exsitant que sous forme de données en mémoire.
<BR><BR>
<li>
<font face="Arial,Helvetica"><font size=-1>Récupérez l'handle du contexte de dispositif (DC=device context ). Vous pouvez obtenir cet handle en appelant BeginPaint après le retour du message WM_PAINT ou en appelant GetDC à n'importe quel moment.</font></font></li>
<li>
<font face="Arial,Helvetica"><font size=-1>Créez un contexte de dispositif en mémoire qui a le même attribut que le contexte de dispositif que nous venons juste d'obtenir. L'idée ici est de créer une sorte de feuille de dessin "cachée" sur laquelle nous pouvons dessiner le bitmap. Quand nous avons finis cette opération, il nous suffit de copier le contenu de la feuille de dessin (cachée) sur le contexte de dispositif réel, grâce à un appel de fonction. C'est un exemple technique de double-affichage, utilisé pour une rapide exposition d'images à l'écran. Vous pouvez créer cette feuille de dessin "cachée" en appelant CreateCompatibleDC.</font></font></li>
</ol>
<ol>
<ol><font face="Arial,Helvetica">CreateCompatibleDC proto hdc:HDC</font></ol>
<p><br><font face="Arial,Helvetica"><font size=-1>Si cette fonction réussit, elle renvoie l'handle du contexte de dispositif de mémoire dans eax. hdc est l'handle du contexte de dispositif pour lequel vous souhaitez que la mémoire DC soit compatible avec lui.</font></font>
<li>
<font face="Arial,Helvetica"><font size=-1>Maintenant que vous avez obtenu une feuille de dessin cachée, vous pouvez dessiner dessus en choisissant le bitmap. On fait ça en appelant SelectObject avec l'handle de la mémoire DC en tant que premier paramètre et l'handle de bitmap comme deuxième paramètre. SelectObject est définit ainsi :</font></font></li>
</ol>
<ol>
<ol><font face="Arial,Helvetica"><font size=-1>SelectObject
proto hdc:HDC, hGdiObject:DWORD</font></font></ol>
<li>
<font face="Arial,Helvetica"><font size=-1>Le bitmap est dessiné sur le contexte de dispositif en mémoire maintenant. Tout ce que nous avons besoin de faire ici, c'est de le recopier sur le dispositif d'affichage réel, à savoir (qui est) le vrai contexte de dispositif. Il y a plusieurs fonctions qui peuvent exécuter cette opération comme BitBlt et StretchBlt. BitBlt recopie seulement le contenu d'un DC dans un autre donc c'est rapide, tandis que StretchBlt peut décompresser ou compresser le bitmap pour le redimensionner à la taille du secteur d'affichage de votre fenêtre. Ici, nous emploierons BitBlt pour simplifier. BitBlt a la définition suivante :</font></font></li>
</ol>
<ol>
<ol><font face="Arial,Helvetica"><font size=-1>BitBlt proto
hdcDest:DWORD, nxDest:DWORD, nyDest:DWORD, nWidth:DWORD, nHeight:DWORD,
hdcSrc:DWORD, nxSrc:DWORD, nySrc:DWORD, dwROP:DWORD</font></font>
<br><font face="Arial,Helvetica"><font size=-1></font></font> </ol>
<font face="Arial,Helvetica"><font size=-1><b><font color="#FFFF99">hdcDest</font></b>
est l'handle du contexte de dispositif réel qui sert de destination pour l'opération de transfert du bitmap.</font></font>
<br><font face="Arial,Helvetica"><font size=-1><b><font color="#FFFF99">nxDest, nyDest </font></b>sont les coordonnées du coin supérieur gauche du secteur d'affichage.</font></font>
<br><font face="Arial,Helvetica"><font size=-1><b><font color="#FFFF99">nWidth, nHeight </font></b>sont la largeur et la hauteur du secteur d'affichage.</font></font>
<br><font face="Arial,Helvetica"><font size=-1><b><font color="#FFFF99">hdcSrc </font></b>est l'handle du contexte de dispositif qui sert de source dans l'opération de transfert du bitmap.</font></font>
<br><font face="Arial,Helvetica"><font size=-1><b><font color="#FFFF99">nxSrc, nySrc </font></b>sont les coordonnées du coin supérieur gauche du rectangle source.</font></font>
<br><font face="Arial,Helvetica"><font size=-1><b><font color="#FFFF99">dwROP </font></b>est le code de l'opération qui permet d'appliquer au mieux les données de couleur du bitmap avec les données de couleur mis à disposition par le secteur d'affichage, pour réaliser le résultat final. La plupart du temps, on souhaite seulement recopier les données de couleur existantes dans le nouveau.</font></font>
<li>
<font face="Arial,Helvetica"><font size=-1>Quand vous avez affiché le bitmap, vous pouvez le supprimer avec l'appel d'API DeleteObject.</font></font></li>
</ol>
<font face="Arial,Helvetica"><font size=-1>Voilà! Pour récapituler, vous avez besoin de placer le bitmap dans un script de ressource (voir plus bas, après la source du programme). Chargez-le alors en ressource avec LoadBitmap. Vous obtiendrez l'handle du bitmap. Ensuite vous obtenez l'handle du contexte de dispositif du secteur sur lequel vous souhaitez redessiner le bitmap. Alors vous créez un contexte de dispositif en mémoire qui est compatible avec le contexte de dispositif que vous venez juste d'obtenir. Choisissez le bitmap dans la mémoire DC et recopiez alors le contenu de la mémoire DC vers votre DC réel.</font></font>
<h3>
<font face="Arial,Helvetica">Example Code:</font></h3>
<tt>.386</tt>
<br><tt>.model flat,stdcall</tt>
<br><tt>option casemap:none</tt>
<br><tt>include \masm32\include\windows.inc</tt>
<br><tt>include \masm32\include\user32.inc</tt>
<br><tt>include \masm32\include\kernel32.inc</tt>
<br><tt>include \masm32\include\gdi32.inc</tt>
<br><tt>includelib \masm32\lib\user32.lib</tt>
<br><tt>includelib \masm32\lib\kernel32.lib</tt>
<br><tt>includelib \masm32\lib\gdi32.lib</tt>
<p><tt>WinMain proto :DWORD,:DWORD,:DWORD,:DWORD</tt>
<br><b><tt><font color="#66FF99">IDB_MAIN equ 1</font></tt></b>
<p><tt>.data</tt>
<br><tt>ClassName db "SimpleWin32ASMBitmapClass",0</tt>
<br><tt>AppName db "Win32ASM Simple Bitmap Example",0</tt>
<p><tt>.data?</tt>
<br><tt>hInstance HINSTANCE ?</tt>
<br><tt>CommandLine LPSTR ?</tt>
<br><tt>hBitmap dd ?</tt>
<p><tt>.code</tt>
<br><tt>start:</tt>
<br><tt> invoke GetModuleHandle, NULL</tt>
<br><tt> mov hInstance,eax</tt>
<br><tt> invoke GetCommandLine</tt>
<br><tt> mov CommandLine,eax</tt>
<br><tt> invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT</tt>
<br><tt> invoke ExitProcess,eax</tt>
<p><tt>WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD</tt>
<br><tt> LOCAL wc:WNDCLASSEX</tt>
<br><tt> LOCAL msg:MSG</tt>
<br><tt> LOCAL hwnd:HWND</tt>
<br><tt> mov wc.cbSize,SIZEOF WNDCLASSEX</tt>
<br><tt> mov wc.style, CS_HREDRAW or CS_VREDRAW</tt>
<br><tt> mov wc.lpfnWndProc, OFFSET WndProc</tt>
<br><tt> mov wc.cbClsExtra,NULL</tt>
<br><tt> mov wc.cbWndExtra,NULL</tt>
<br><tt> push hInstance</tt>
<br><tt> pop wc.hInstance</tt>
<br><tt> mov wc.hbrBackground,COLOR_WINDOW+1</tt>
<br><tt> mov wc.lpszMenuName,NULL</tt>
<br><tt> mov wc.lpszClassName,OFFSET ClassName</tt>
<br><tt> invoke LoadIcon,NULL,IDI_APPLICATION</tt>
<br><tt> mov wc.hIcon,eax</tt>
<br><tt> mov wc.hIconSm,eax</tt>
<br><tt> invoke LoadCursor,NULL,IDC_ARROW</tt>
<br><tt> mov wc.hCursor,eax</tt>
<br><tt> invoke RegisterClassEx, addr wc</tt>
<br><tt> INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\</tt>
<br><tt> WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\</tt>
<br><tt> CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\</tt>
<br><tt> hInst,NULL</tt>
<br><tt> mov hwnd,eax</tt>
<br><tt> invoke ShowWindow, hwnd,SW_SHOWNORMAL</tt>
<br><tt> invoke UpdateWindow, hwnd</tt>
<br><tt> .while TRUE</tt>
<br><tt> invoke GetMessage, ADDR msg,NULL,0,0</tt>
<br><tt> .break .if (!eax)</tt>
<br><tt> invoke TranslateMessage, ADDR msg</tt>
<br><tt> invoke DispatchMessage, ADDR msg</tt>
<br><tt> .endw</tt>
<br><tt> mov eax,msg.wParam</tt>
<br><tt> ret</tt>
<br><tt>WinMain endp</tt>
<p><tt>WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM</tt>
<br><tt> LOCAL ps:PAINTSTRUCT</tt>
<br><tt> LOCAL hdc:HDC</tt>
<br><tt> LOCAL hMemDC:HDC</tt>
<br><tt> LOCAL rect:RECT</tt>
<br><tt> .if uMsg==WM_CREATE</tt>
<br><b><tt><font color="#66FF99"> invoke
LoadBitmap,hInstance,IDB_MAIN</font></tt></b>
<br><b><tt><font color="#66FF99"> mov hBitmap,eax</font></tt></b>
<br><tt> .elseif uMsg==WM_PAINT</tt>
<br><b><tt><font color="#66FF99"> invoke
BeginPaint,hWnd,addr ps</font></tt></b>
<br><b><tt><font color="#66FF99"> mov
hdc,eax</font></tt></b>
<br><b><tt><font color="#66FF99"> invoke
CreateCompatibleDC,hdc</font></tt></b>
<br><b><tt><font color="#66FF99"> mov
hMemDC,eax</font></tt></b>
<br><b><tt><font color="#66FF99"> invoke
SelectObject,hMemDC,hBitmap</font></tt></b>
<br><b><tt><font color="#66FF99"> invoke
GetClientRect,hWnd,addr rect</font></tt></b>
<br><b><tt><font color="#66FF99"> invoke
BitBlt,hdc,0,0,rect.right,rect.bottom,hMemDC,0,0,SRCCOPY</font></tt></b>
<br><b><tt><font color="#66FF99"> invoke
DeleteDC,hMemDC</font></tt></b>
<br><b><tt><font color="#66FF99"> invoke
EndPaint,hWnd,addr ps</font></tt></b>
<br><tt> .elseif uMsg==WM_DESTROY</tt>
<br><b><tt><font color="#66FF99"> invoke DeleteObject,hBitmap</font></tt></b>
<br><tt> invoke PostQuitMessage,NULL</tt>
<br><tt> .ELSE</tt>
<br><tt> invoke DefWindowProc,hWnd,uMsg,wParam,lParam</tt>
<br><tt> ret</tt>
<br><tt> .ENDIF</tt>
<br><tt> xor eax,eax</tt>
<br><tt> ret</tt>
<br><tt>WndProc endp</tt>
<br><tt>end start</tt>
<p><tt>;---------------------------------------------------------------------</tt>
<br><tt>;
le script resource </tt>
<br><tt>;---------------------------------------------------------------------</tt>
<br><b><tt><font color="#FFFF99">#define IDB_MAIN 1</font></tt></b>
<br><b><tt><font color="#FFFF99">IDB_MAIN BITMAP "tweety78.bmp"</font></tt></b>
<h3>
<font face="Arial,Helvetica"><font size=+1>Analyse:</font></font></h3>
<font face="Arial,Helvetica"><font size=-1>Il n'y a pas grand chose à analyser dans ce tutorial ;)</font></font>
<br>
<blockquote><b><tt><font color="#FFFF99">#define IDB_MAIN 1</font></tt></b>
<br><b><tt><font color="#FFFF99">IDB_MAIN BITMAP "tweety78.bmp"</font></tt></b></blockquote>
<b><font face="Arial,Helvetica"><font color="#FFFFFF"><font size=-1>Ça définit la constante nommée IDB_MAIN, on lui associe la valeur 1. Et on emploie ensuite cette constante en tant qu'identificateur du bitmap en ressource. Le fichier bitmap qui est inclus dans la ressource est "tweety78.bmp" lequel réside dans le même dossier que le script de ressource.</font></font></font></b>
<p><tt> .if uMsg==WM_CREATE</tt>
<br><b><tt><font color="#66FF99"> invoke
LoadBitmap,hInstance,IDB_MAIN</font></tt></b>
<br><b><tt><font color="#66FF99"> mov hBitmap,eax</font></tt></b>
<p><b><font face="Arial,Helvetica"><font color="#FFFFFF"><font size=-1>En réponse à WM_CREATE, nous appelons LoadBitmap pour charger le bitmap en ressource, en passant l'identificateur du bitmap en ressource comme deuxième paramètre de l'API. Nous obtenons l'handle du bitmap au moment du retour de la fonction.</font></font></font></b>
<br><b><font face="Arial,Helvetica"><font color="#FFFFFF"><font size=-1>Maintenant que le bitmap est chargé, nous pouvons le dessiner dans le secteur client de notre fenêtre principale.</font></font></font></b>
<p><tt> .elseif uMsg==WM_PAINT</tt>
<br><b><tt><font color="#66FF99"> invoke BeginPaint,hWnd,addr ps</font></tt></b>
<br><b><tt><font color="#66FF99"> mov
hdc,eax</font></tt></b>
<br><b><tt><font color="#66FF99"> invoke CreateCompatibleDC,hdc</font></tt></b>
<br><b><tt><font color="#66FF99"> mov
hMemDC,eax</font></tt></b>
<br><b><tt><font color="#66FF99"> invoke SelectObject,hMemDC,hBitmap</font></tt></b>
<br><b><tt><font color="#66FF99"> invoke GetClientRect,hWnd,addr rect</font></tt></b>
<br><b><tt><font color="#66FF99"> invoke BitBlt,hdc,0,0,rect.right,rect.bottom,hMemDC,0,0,SRCCOPY</font></tt></b>
<br><b><tt><font color="#66FF99"> invoke DeleteDC,hMemDC</font></tt></b>
<br><b><tt><font color="#66FF99"> invoke EndPaint,hWnd,addr ps</font></tt></b>
<p><font face="Arial,Helvetica"><font color="#FFFFFF"><font size=-1>Nous décidons de repeindre le bitmap après la réponse du message WM_PAINT. Nous appelons d'abord BeginPaint pour obtenir l'handle du contexte de dispositif. Ensuite, nous créons une mémoire compatible DC avec CreateCompatibleDC. Puis on sélectionne le bitmap à l'intérieur de la mémoire DC grâce à SelectObject. Déterminez la dimension de votre secteur client avec GetClientRect. Maintenant nous pouvons faire apparaître le bitmap dans le secteur client en appelant BitBlt, lequel recopie le bitmap de la mémoire DC vers le DC réel. Lorsque la repeinte est effectue, nous n'avons plus besoin de la mémoire DC donc nous le supprimons grâce à DeleteDC. On fini la session de peinture avec EndPaint.</font></font></font>
<blockquote><tt> .elseif uMsg==WM_DESTROY</tt>
<br><b><tt><font color="#66FF99"> invoke DeleteObject,hBitmap</font></tt></b>
<br><tt> invoke PostQuitMessage,NULL</tt></blockquote>
<font face="Arial,Helvetica"><font size=-1>Dès lors que nous n'avons plus besoin du bitmap, nous le supprimons avec DeleteObject.</font></font>
<br>
<hr WIDTH="100%">
<center><b>[<a href="http://win32asm.cjb.net">Iczelion's Win32 Assembly HomePage</a>]</b></center>
<BR><BR><DIV ALIGN="right">Traduit par Morgatte</DIV>
</body>
</html>