[code 02] deplacer une fenetre sans la bordure [masm32]

Contenu du snippet

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 / Exemple :


; 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

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.