begin process at 2010 03 20 14:08:11
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Tutoriels

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

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


 Information sur la source

Note :
Aucune note
Catégorie :Tutoriels Niveau :Débutant Date de création :02/07/2002 Date de mise à jour :02/07/2002 02:24:36 Vu :3 471

Auteur : BlackWizzard

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
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



 Sources du même auteur

MASM :: SE COPIER AVEC GESTION DES ERREURS
MASM :: GETMODULEFILENAMEA :: RECUPERER LE NOM DE L'EXECUTAB...
[CODE 04] RECUPERER LE CARACTÉRE TAPÉ ET LES COORDONNÉES DE ...
[CODE 03] LES EVENEMENTS D'UNE FENETRE. [MASM32]
[CODE 01] CREATION D'UNE FENETRE [MASM32]

 Sources de la même categorie

Source avec Zip FLOATTOHEX CODE DE BRUNEWS RETRENSCRIS EN ASM PAR MOI par quoi
Source avec Zip [TUTO]PRISE EN MAIN ET CRÉATION DE .EXE À L'AIDE D'UN DÉBUGU... par rt15
Source avec Zip FPU SAMPLE 2. par tomart2005
Source avec Zip STARFIELD, SPHERE, CUBE, ROTATION 3D ET 2D EN UTILISANT LE F... par tomart2005
Source avec Zip REPRÉSENTATION D'UNE SPHÈRE EN 3D (FLAT SHADING) par Nasman

Commentaires et avis

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)

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




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,889 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales