Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пн авг 20, 2018 16:57

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Win32 API. ASM -> FORTH
СообщениеДобавлено: Пт июн 13, 2008 06:34 
Не в сети
Аватара пользователя

Зарегистрирован: Вс май 25, 2008 06:54
Сообщения: 27
Откуда: Украина
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Здравствуйте =)
Очень хочется научиться хотя бы примерно, как работать с ф-иями 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


если надо, напишу это на С ... просто я спешил, и мне легче это на асме сделать.. да и думаю, большинство фортеров знает ассемблер...

_________________
Jabber: necromancer13.13@jabber.ru

Изображение


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 13, 2008 16:24 
Не в сети
Аватара пользователя

Зарегистрирован: Вт ноя 06, 2007 21:23
Сообщения: 227
Откуда: Екатеринбург
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
вот так это выглядит на Свифте8) на СПФ чуть по-другому
Код:
CREATE AppName ,Z" HelloWin"

[SWITCH HELLO-MESSAGES DEFWINPROC ( -- res )
   WM_DESTROY RUN:  0 PostQuitMessage DROP  0 ;
SWITCH]

:NONAME  MSG LOWORD HELLO-MESSAGES ; 4 CB: WNDPROC
: MYWINDOW ( -- hwnd )
      0                                 \ extended style
      AppName                           \ window class name
      Z" The Hello Program"             \ window caption
      WS_OVERLAPPEDWINDOW               \ window style
      CW_USEDEFAULT                     \ initial x position
      CW_USEDEFAULT                     \ y
      CW_USEDEFAULT                     \ x size
      CW_USEDEFAULT                     \ y
      0                                 \ parent window handle
      0                                 \ window menu handle
      HINST                             \ program instance handle
      0                                 \ creation parameter
   CreateWindowEx ;
: DEMO ( -- )
   AppName WNDPROC DefaultClass DROP
   MYWINDOW DUP SW_SHOWDEFAULT ShowWindow DROP
   UpdateWindow DROP
   DISPATCHER DROP ;

: WINMAIN ( -- )
   DEMO 0 ExitProcess ;

' WINMAIN 'MAIN !


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB