Здравствуйте =)
Очень хочется научиться хотя бы примерно, как работать с ф-иями WIN API %)
если есть время и желание, переведите, плиз, это с ассемблера на Форт?
Код: format PE GUI 4.0 entry start include '%fasminc%\win32a.inc' hInstance dd ? wc WNDCLASSEX ClassName db '##CLASS##',0 AppName db '$$$$$$$$$',0 hwnd dd ? msg MSG start: invoke GetModuleHandle,0 mov [hInstance],eax mov [wc.hInstance],eax mov [wc.cbSize],sizeof.WNDCLASSEX mov [wc.style],CS_HREDRAW or CS_VREDRAW mov [wc.lpfnWndProc],WndProc mov [wc.cbClsExtra],0 mov [wc.cbWndExtra],0 mov [wc.lpszClassName],ClassName mov [wc.lpszMenuName],0 mov [wc.hbrBackground],COLOR_WINDOW+1 invoke LoadIcon,0,IDI_APPLICATION mov [wc.hIcon],eax mov [wc.hIconSm],eax invoke LoadCursor,0,IDC_ARROW mov [wc.hCursor],eax invoke RegisterClassEx,wc invoke CreateWindowEx,0,ClassName,AppName,WS_OVERLAPPEDWINDOW,300,200,300,200,0,0,[hInstance],0 mov [hwnd],eax invoke ShowWindow,eax,SW_SHOW invoke UpdateWindow,[hwnd] @@: invoke GetMessage,msg,0,0,0 test eax,eax jz @f invoke TranslateMessage,msg invoke DispatchMessage,msg jmp @b @@: mov eax,[msg.wParam] invoke ExitProcess,eax
proc WndProc hWnd, uMsg, wParam, lParam cmp [uMsg],WM_CREATE je .wmcreate cmp [uMsg],WM_DESTROY je .wmdestroy invoke DefWindowProc,[hWnd],[uMsg],[wParam],[lParam] ret .wmcreate: push 0 call @f db '^_^',0 @@: call @f db 'Hello World!',0 @@: push 0 call [MessageBox] jmp .finish .wmdestroy: invoke PostQuitMessage,0 .finish: xor eax,eax ret endp
data import library user32,'user32.dll',\ kernel32,'kernel32.dll' include '%fasminc%\api\user32.inc' include '%fasminc%\api\kernel32.inc' end data
если надо, напишу это на С ... просто я спешил, и мне легче это на асме сделать.. да и думаю, большинство фортеров знает ассемблер...
Здравствуйте =)
Очень хочется научиться хотя бы примерно, как работать с ф-иями WIN API %)
если есть время и желание, переведите, плиз, это с ассемблера на Форт? ;)
[code] format PE GUI 4.0 entry start include '%fasminc%\win32a.inc' hInstance dd ? wc WNDCLASSEX ClassName db '##CLASS##',0 AppName db '$$$$$$$$$',0 hwnd dd ? msg MSG start: invoke GetModuleHandle,0 mov [hInstance],eax mov [wc.hInstance],eax mov [wc.cbSize],sizeof.WNDCLASSEX mov [wc.style],CS_HREDRAW or CS_VREDRAW mov [wc.lpfnWndProc],WndProc mov [wc.cbClsExtra],0 mov [wc.cbWndExtra],0 mov [wc.lpszClassName],ClassName mov [wc.lpszMenuName],0 mov [wc.hbrBackground],COLOR_WINDOW+1 invoke LoadIcon,0,IDI_APPLICATION mov [wc.hIcon],eax mov [wc.hIconSm],eax invoke LoadCursor,0,IDC_ARROW mov [wc.hCursor],eax invoke RegisterClassEx,wc invoke CreateWindowEx,0,ClassName,AppName,WS_OVERLAPPEDWINDOW,300,200,300,200,0,0,[hInstance],0 mov [hwnd],eax invoke ShowWindow,eax,SW_SHOW invoke UpdateWindow,[hwnd] @@: invoke GetMessage,msg,0,0,0 test eax,eax jz @f invoke TranslateMessage,msg invoke DispatchMessage,msg jmp @b @@: mov eax,[msg.wParam] invoke ExitProcess,eax
proc WndProc hWnd, uMsg, wParam, lParam cmp [uMsg],WM_CREATE je .wmcreate cmp [uMsg],WM_DESTROY je .wmdestroy invoke DefWindowProc,[hWnd],[uMsg],[wParam],[lParam] ret .wmcreate: push 0 call @f db '^_^',0 @@: call @f db 'Hello World!',0 @@: push 0 call [MessageBox] jmp .finish .wmdestroy: invoke PostQuitMessage,0 .finish: xor eax,eax ret endp
data import library user32,'user32.dll',\ kernel32,'kernel32.dll' include '%fasminc%\api\user32.inc' include '%fasminc%\api\kernel32.inc' end data [/code]
если надо, напишу это на С ... просто я спешил, и мне легче это на асме сделать.. да и думаю, большинство фортеров знает ассемблер...
|