begin process at 2008 08 28 15:03:03
1 233 147 membres
251 nouveaux aujourd'hui
14 291 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[CODE 02] DEPLACER UNE FENETRE SANS LA BORDURE [MASM32]


Information sur la source

Catégorie :Tutoriels Niveau : Débutant Date de création : 02/07/2002 Date de mise à jour : 02/07/2002 02:24:36 Vu : 2 509

Note :
Aucune note

Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note


Description

Voici le 2eme code de la serie.
C un code assez simple, il n'y a pas grand chose de nouveau par rapport au precedent code.

Source

  • ; dans le precedent code, je vous avais dit que je vous apprendrais comment deplacer la fenetre sans la bordure!
  • ; hé bien voila! C fait!
  • ; j'en ai profité pour changer le curseur.
  • ; pas d'autres nouveautés, pour bien vous laisser comprendre...
  • ; Prochain code :: Conformation de sortie de programme.
  • ; ce ne sera pas encore tres compliqué! n'oubliez pas que au moment ou j'ecrit ces ligne, je ne fait de l'asm que depuis 5 jours et qques heures!
  • ; (bon, d'accord, j'y passe mes nuits...)
  • .386 ;on utilisera les instruction du 386, ce qui est bien suffisant. (on peut aussi utiliser .486 ou .586)
  • .model flat,stdcall
  • option casemap:none
  • include \masm32\include\windows.inc
  • include \masm32\include\user32.inc
  • include \masm32\include\kernel32.inc
  • includelib \masm32\lib\user32.lib
  • includelib \masm32\lib\kernel32.lib
  • WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
  • .data
  • ClassName db "SimpleWinClass",0
  • AppName db "Essayez de bouger la fenetre sans la bordure!",0 ; le titre!
  • .data?
  • hInstance dd ?
  • CommandLine dd ?
  • .code
  • start:
  • invoke GetModuleHandle, NULL
  • mov hInstance,eax
  • invoke GetCommandLine
  • mov CommandLine,eax
  • invoke WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT
  • invoke ExitProcess, eax
  • WinMain proc hInst:HINSTANCE, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:DWORD
  • LOCAL wc:WNDCLASSEX
  • LOCAL msg:MSG
  • LOCAL hwnd:HWND ; le handle de la fenetre...
  • mov wc.cbSize, SIZEOF WNDCLASSEX
  • mov wc.style, CS_HREDRAW or CS_VREDRAW
  • mov wc.lpfnWndProc, OFFSET WndProc
  • mov wc.cbClsExtra, NULL
  • mov wc.cbWndExtra, NULL
  • push hInstance
  • pop wc.hInstance
  • mov wc.hbrBackground, COLOR_BTNFACE ;Couleur de fond de la fenetre...
  • mov wc.lpszMenuName, NULL
  • mov wc.lpszClassName, OFFSET ClassName
  • invoke LoadIcon, NULL, IDI_APPLICATION
  • mov wc.hIcon, eax
  • mov wc.hIconSm, eax
  • invoke LoadCursor, NULL, IDC_SIZEALL ;là, on va mettre le curseur de positionnement...
  • mov wc.hCursor, eax
  • invoke RegisterClassEx, addr wc
  • INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
  • WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
  • CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\
  • hInst,NULL
  • mov hwnd, eax
  • invoke ShowWindow, hwnd, SW_SHOWNORMAL
  • invoke UpdateWindow, hwnd
  • .WHILE TRUE
  • invoke GetMessage, ADDR msg, NULL, 0, 0
  • .BREAK .IF (!eax)
  • invoke TranslateMessage, ADDR msg
  • invoke DispatchMessage, ADDR msg
  • .ENDW
  • mov eax,msg.wParam
  • ret
  • WinMain endp
  • WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
  • ;##################################################################################
  • ;
  • ; Ici, on traite et on analyse les messages. on peut par exemple
  • ; recuperer des evenements genre le mousedown (WM_LBUTTONDOWN), le load (WM_CREATE),
  • ; le beforequit (WM_DESTROY), etc... (là, je compare avec VB! lol)
  • ;
  • ;##################################################################################
  • .if uMsg==WM_DESTROY
  • invoke PostQuitMessage, NULL ;receptpion du message "qqun a cliqué sur la croix en haut" donc, on ferme l'application.
  • .ELSEIF uMsg == WM_LBUTTONDOWN ;Si mousedown, alors on deplace la fenetre sans la bordure! Magik! et vous voyez? plus simple qu'en VB!
  • invoke SendMessage,hWnd,WM_NCLBUTTONDOWN,HTCAPTION,lParam
  • .else
  • invoke DefWindowProc, hWnd, uMsg, wParam, lParam
  • ret
  • .endif
  • xor eax,eax ; on initialise eax a 0 dans le cas d'une future utilisation. (qqun px m'expliquer pourkoi on fait pas "mov eax,0" ?? mailto:blackwizzard@wanadoo.fr)
  • ret ; ret sert a sortir de la macro et revenir a l'instruction qui suis celle qui a lancer la macro...heu...j'arrive pas a etre clair!
  • WndProc endp
  • end start
; dans le precedent code, je vous avais dit que je vous apprendrais comment deplacer la fenetre sans la bordure!
; hé bien voila! C fait!
; j'en ai profité pour changer le curseur.
; pas d'autres nouveautés, pour bien vous laisser comprendre...
; Prochain code :: Conformation de sortie de programme.
; ce ne sera pas encore tres compliqué! n'oubliez pas que au moment ou j'ecrit ces ligne, je ne fait de l'asm que depuis 5 jours et qques heures!
; (bon, d'accord, j'y passe mes nuits...)

.386 ;on utilisera les instruction du 386, ce qui est bien suffisant. (on peut aussi utiliser .486 ou .586)
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

WinMain proto :DWORD,:DWORD,:DWORD,:DWORD

.data
ClassName db "SimpleWinClass",0
AppName  db "Essayez de bouger la fenetre sans la bordure!",0 ; le titre!

.data?
hInstance dd ?
CommandLine dd ?

.code
start:
	invoke GetModuleHandle, NULL
	mov    hInstance,eax
	invoke GetCommandLine
	mov    CommandLine,eax
	invoke WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT
	invoke ExitProcess, eax

WinMain proc hInst:HINSTANCE, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:DWORD
	LOCAL wc:WNDCLASSEX
	LOCAL msg:MSG
	LOCAL hwnd:HWND ; le handle de la fenetre...
	
	mov   wc.cbSize, SIZEOF WNDCLASSEX
	mov   wc.style, CS_HREDRAW or CS_VREDRAW
	mov   wc.lpfnWndProc, OFFSET WndProc
	mov   wc.cbClsExtra, NULL
	mov   wc.cbWndExtra, NULL
	push  hInstance
	pop   wc.hInstance
	mov   wc.hbrBackground, COLOR_BTNFACE ;Couleur de fond de la fenetre...
	mov   wc.lpszMenuName, NULL
	mov   wc.lpszClassName, OFFSET ClassName
	invoke LoadIcon, NULL, IDI_APPLICATION
	mov   wc.hIcon, eax
	mov   wc.hIconSm, eax
	invoke LoadCursor, NULL, IDC_SIZEALL ;là, on va mettre le curseur de positionnement...
	mov   wc.hCursor, eax
	invoke RegisterClassEx, addr wc
	INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
           WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
           CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\
           hInst,NULL
	mov   hwnd, eax
	invoke ShowWindow, hwnd, SW_SHOWNORMAL
	invoke UpdateWindow, hwnd
	.WHILE TRUE
		invoke GetMessage, ADDR msg, NULL, 0, 0
		.BREAK .IF (!eax)
		invoke TranslateMessage, ADDR msg
		invoke DispatchMessage, ADDR msg
	.ENDW
	mov     eax,msg.wParam
	ret
WinMain endp

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

;##################################################################################
;
; Ici, on traite et on analyse les messages. on peut par exemple
; recuperer des evenements genre le mousedown (WM_LBUTTONDOWN), le load (WM_CREATE), 
; le beforequit (WM_DESTROY), etc... (là, je compare avec VB! lol)
;
;##################################################################################

	.if uMsg==WM_DESTROY
	invoke PostQuitMessage, NULL ;receptpion du message "qqun a cliqué sur la croix en haut" donc, on ferme l'application.

	.ELSEIF uMsg == WM_LBUTTONDOWN ;Si mousedown, alors on deplace la fenetre sans la bordure! Magik! et vous voyez? plus simple qu'en VB!
        invoke  SendMessage,hWnd,WM_NCLBUTTONDOWN,HTCAPTION,lParam
        
	.else
		invoke DefWindowProc, hWnd, uMsg, wParam, lParam		
		ret
	.endif
	xor eax,eax ; on initialise eax a 0 dans le cas d'une future utilisation. (qqun px m'expliquer pourkoi on fait pas "mov eax,0" ?? mailto:blackwizzard@wanadoo.fr)
	ret ; ret sert a sortir de la macro et revenir a l'instruction qui suis celle qui a lancer la macro...heu...j'arrive pas a etre clair!
WndProc endp
end start
  • signaler à un administrateur
    Commentaire de eedy31 le 16/07/2002 15:40:43

    hello! le xor  eax,eax et mov eax,0 équivalent a la meme chose(apparemment je t'apprend rien)sauf que le xor est plus rapide a executer pour le processeur ke le mov et kil tien moins de place dans l'executable (compare les byte d'1 mov et d'1 xor avec un desassembleur)

  • signaler à un administrateur
    Commentaire de BlackWizzard le 16/07/2002 19:52:18 administrateur CS

    ok, thx!
    enfin bon, T le 3eme qui me repond, je commence a savoir!
    mais tu pouvais pas savoir! :p

    merci kan meme!

Ajouter un commentaire

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS