Тема: Часики [ASM]
Показать сообщение отдельно

ипусь, ипусь..
  #29  
Старый 24.08.2007, 22:50
yeti
Постоянный
Регистрация: 27.12.2006
Сообщений: 379
Провел на форуме:
1983988

Репутация: 1037
По умолчанию ипусь, ипусь..

Мля... я уже сколько долблюсь.. наверное мало знаю..

Вот код выкладываю. сильно не ржать, он очень и очень кривой... Посмотрите. Кому не лень может кто подскажет и доработает сам.. Если уж у меня не выйдет...

Код:
.TITLE 4ase (.ASM)
.386
.model flat, stdcall

includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\gdi32.lib
include c:\masm32\include\windows.inc
include c:\masm32\include\user32.inc
include c:\masm32\include\kernel32.inc

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

.data


ClassName db "SimpleWinClass",0 							; Имя нашего класса окна
AppName db "Our First Window",0 							; Имя нашего окна
hInstance HINSTANCE ?										;получае хэндл программы
CommandLine LPSTR ?
SetWindowPos PROTO	
GetActiveWindow PROTO
SetWindowPos PROTO

.code
	
start:	
	
	mov eax, 0												;забываю помещать в регистр исходные значения. мля.. =\\
	
GetModuleHandle PROTO
GetLocalTime PROTO
 		
			
hmodule==hinstance mov hInstance,eax						;берем хэндл программы
invoke GetCommandLine										;берем командную строку. ноги в руки. и вперед.. 		
mov CommandLine,eax											;тут все ясно.. 
invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT	;вызов основных ф-ций

	invoke ExitProcess, eax									;корректное завершение программы
	

WinMain PROC												;мы взяли отсюда возвращаемое значение для eax

Inst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD

LOCAL wc:WNDCLASSEX											;создаем в стеке локальные переменные
LOCAL msg:MSG
LOCAL hwnd:HWND

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_WINDOW+1
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_ARROW
mov    wc.hCursor,eax
invoke RegisterClassEx, addr wc

	invoke GetModuleHandle, 0
	
	
invoke CreateWindowEx, 0									;регистрация классов окна.. 
				hWnd dd ?									;хэндл окна
				szWindowName db 'Часики',0					;имя окна
                ADDR ClassName,\							
                ADDR AppName,\							
                WS_OVERLAPPEDWINDOW,\
                CW_USEDEFAULT,\
                CW_USEDEFAULT,\
                CW_USEDEFAULT,\
                CW_USEDEFAULT,\
                0,\
                0,\
                hInst,\
                0
    mov   hwnd,eax
	
msg_loop:
	invoke GetMessage, offset msg, 0, 0, 0
	cmp eax, 0
	jz loop_end
	invoke DispatchMessage, offset msg
	jmp msg_loop	
	
loop_end:
	 
	
  invoke ShowWindow, hwnd,CmdShow 						; отобpажение окна на десктопе
  invoke UpdateWindow, hwnd 							; обновить клиентскую область

  


;----------------------------------------------------------------------------------------------	
	.elseif uMsg==WM_NCHITTEST      
	invoke DefWindowProc,hWnd,uMsg,wParam,lParam  
        .if eax==HTCLIENT    
mov eax,HTCAPTION
        .endif 
	ret 
;перемещение окна.. надо обрисовать само окно
;----------------------------------------------------------------------------------------------		

INVOKE GetLocalTime 

.data
SYSTEMTIME STRUCT
	wYear WORD ?
	wMonth WORD ?
	wDayOfWeek WORD ?
	wDay WORD ?
	wHour WORD ?
	wMinute WORD ?
	wSecond WORD ?
SYSTEMTIME ENDS	
time SYSTEMTIME <0,0,0,0,0,0,0>

	end start
Вот.. стоило пытаться блин.. =\
ПС: синтаксис масма
 
Ответить с цитированием