Мля... я уже сколько долблюсь.. наверное мало знаю..
Вот код выкладываю. сильно не ржать, он очень и очень кривой... Посмотрите. Кому не лень может кто подскажет и доработает сам.. Если уж у меня не выйдет...
Код:
.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
Вот.. стоило пытаться блин.. =\