RSS    

   Êóðñîâàÿ ðàáîòà: Ñîçäàòü ìåíþ áåç ôàéëà îïèñàíèÿ ðåñóðñîâ ñ ïîìîùüþ ôóíêöèé CreateMenu è CreatePopupMenu

            extrn            ShowWindow             :PROC

            extrn            TranslateMessage      :PROC

            extrn               UpdateWindow          :PROC

            extrn               CreateMenu               :PROC

            extrn               MessageBoxA             :PROC

            extrn              AppendMenuA            :PROC

            extrn               DrawMenuBar             :PROC

            extrn             CreatePopupMenu      :PROC


     .data               ; ïåðåîïðåäåëåííîå èìÿ, îçíà÷àþùåå íà÷àëî ñåãìåíòà

                                       ; äàííûõ

            newhwnd          dd     0

            lppaint          PAINTSTRUCT <?>

            msg              MSGSTRUCT   <?>

            wc               WNDCLASS    <?>

            hInst             dd          0

            fl                      dw      0

            szTitleName          db 'Ýòî íàøå îêíî',0

            szClassName         db 'ASMCLASS32',0

            szHello                        db       'Ïðèâåò!',0

            szAppName   db       'Ñîîáùåíèå',0

            hMenu                        dd       0

            hsubmenu         dd     0

            item1               db       'Ìåíþ',0

            item2               db       'Âûõîä',0

            item3               db       'Âîçâðàò',0

            .code                  ; ïåðåîïðåäåëåííîå èìÿ, îçíà÷àþùåå íà÷àëî

                                                   ; ñåãìåíòà êîäà

            start:

            push    L 0

            call    GetModuleHandleA

            mov     [hInst], eax

      ;èíèöèàëèçàöèÿ ñòðóêòóðû WndClass

 

    mov     [wc.clsStyle], CS_HREDRAW + CS_VREDRAW +

                      CS_GLOBALCLASS

            mov     [wc.clsLpfnWndProc], offset WndProc

            mov     [wc.clsCbClsExtra], 0

            mov     [wc.clsCbWndExtra], 0

            mov     eax, [hInst]

            mov     [wc.clsHInstance], eax

            push    L IDI_APPLICATION

            push    L 0

            call    LoadIconA

            mov     [wc.clsHIcon], eax

            push    L IDC_ARROW

            push    L 0

            call    LoadCursorA

            mov     [wc.clsHCursor], eax

            mov     [wc.clsHbrBackground], COLOR_WINDOW + 1

            mov     dword ptr [wc.clsLpszMenuName],0

            mov     dword ptr [wc.clsLpszClassName], offset szClassName

            push    offset wc

            call    RegisterClassA

            call   CreateMenu

            mov     [hMenu],eax

            push    L 0                      ; lpParam

            push    [hInst]                  ; hInstance

            push    [hMenu]                  ; menu

            push    L 0                      ; parent hwnd

            push    L CW_USEDEFAULT          ; height

            push    L CW_USEDEFAULT          ; width

            push    L CW_USEDEFAULT          ; y

            push    L CW_USEDEFAULT          ; x

            push    L WS_OVERLAPPEDWINDOW    ; Style

            push    offset szTitleName       ; Title string

            push    offset szClassName       ; Class name

            push    L 0                      ; extra style

            call    CreateWindowExA

            mov     [newhwnd], eax

            call      CreatePopupMenu

            mov     [hsubmenu], eax

            push    offset   item2

            push    L IDM_QUIT

            push    0

            push    eax

            call      AppendMenuA

            push    offset item3

            push    L IDM_ABOUT

            push    0

            push    [hsubmenu]  ;eax

     call AppendMenuA

     push           offset   item1

push    [hsubmenu]

push    MF_POPUP

push       [hMenu]

call      AppendMenuA

nop


push    L SW_SHOWNORMAL

push    [newhwnd]

call    ShowWindow

push    [newhwnd]

call    UpdateWindow

push    [newhwnd]

call      DrawMenuBar

msg_loop:

push    L 0

push    L 0

push    L 0

push    offset msg

call    GetMessageA

cmp     ax, 0

je      end_loop

push    offset msg

call    TranslateMessage

push    offset msg

call    DispatchMessageA

jmp     msg_loop

end_loop:

push    [msg.msWPARAM]

call    ExitProcess


;----Îêîííàÿ ïðîöåäóðà----

WndProc proc uses ebx edi esi, hwnd:DWORD, wmsg:DWORD,\

wparam:DWORD, lparam:DWORD

LOCAL   hDC:DWORD

cmp     [wmsg], WM_DESTROY

je      wmdestroy

cmp     [wmsg], WM_SIZE

je      wmsize

cmp     [wmsg], WM_CREATE

je      wmcreate

cmp     [wmsg],WM_PAINT

je      wmpaint

;**************************************

cmp     [wmsg],WM_COMMAND

je         wmcommand

;**************************************

jmp     defwndproc

wmcommand:

mov     eax,lparam

cmp     ax,0

jne       m1

mov     eax,wparam

cmp     ax,IDM_ABOUT

jne       m2

call      MessageBoxA,0,offset szHello,offset szAppName,MB_OK

jmp     m1

m2:      cmp     ax,IDM_QUIT

jne       m1

push    0

call      PostQuitMessage

m1:      mov     eax,0

jmp     finish


wmcreate:

mov     eax, 0

jmp     finish

defwndproc:

push    [lparam]

push    [wparam]

push    [wmsg]

push    [hwnd]

call    DefWindowProcA

jmp     finish

wmdestroy:

push    L         0

call      PostQuitMessage

mov     eax, 0

jmp     finish

wmsize:

mov     eax, 0

jmp     finish

wmpaint:

push    offset  lppaint

push    [hwnd]

call    BeginPaint

mov     [hDC],eax

push    offset lppaint

push    [hwnd]

call    EndPaint

mov     eax,0

jmp     finish

finish:

ret

WndProc          endp

;---------------------------------

public WndProc

end start                             ;  êîíåö ïðîãðàììû


ðèñ1. Îêíî ïðîãðàììû


Çàêëþ÷åíèå

Ìîÿ çàäà÷à ñîñòîÿëà â ñîçäàíèè ïðîãðàììû áåç ôàéëà îïèñàíèÿ ðåñóðñîâ ñ ïîìîùüþ ôóíêöèé CreateMenu è CreatePopupMenu. Ýòî ïðèëîæåíèå íå âûïîëíÿåò íèêàêîé ïîëåçíîé ðàáîòû è ñëóæèò äëÿ äåìîíñòðàöèè íåêîòîðûõ âîçìîæíîñòåé ñèñòåìû â îðãàíèçàöèè èíòåðôåéñà ïîëüçîâàòåëÿ.

Áèáëèîãðàôè÷åñêèé ñïèñîê

Çóáêîâ Ñ.Â. Assembler. Äëÿ DOS Windows è Unix. Ì.: ÄÌÊ, 1999

Ïóñòîâàðîâ Â.È. ÀÑÑÅÌÁËÅÐ. Ïðîãðàììèðîâàíèå è àíàëèç êîððåêòíîñòè ìàøèííûõ ïðîãðàìì.

Ïðèìåíåíèå TURBO ASSEMBLER äëÿ ïðîãðàììèðîâàíèÿ ÏÝÂÌ. ×àñòü1,2.: Ìåòîäè÷åñêèå óêàçàíèÿ ê ëàáîðàòîðíîìó ïðàêòèêóìó ïî äèñöèïëèíå :  «Ñèñòåìíîå ïðîãðàììíîå îáåñïå÷åíèå» / Ñîñòàâèòåëü Â.Ï.Êóëþêèí. Åêàòåðèíáóðã: èçä. ÈÏÊ ÓÃÒÓ, 2000.



Ñòðàíèöû: 1, 2


Íîâîñòè


Áûñòðûé ïîèñê

Ãðóïïà âÊîíòàêòå: íîâîñòè

Ïîêà íåò

Íîâîñòè â Twitter è Facebook

                   

Íîâîñòè

Îáðàòíàÿ ñâÿçü

Ïîèñê
Îáðàòíàÿ ñâÿçü
Ðåêëàìà è ðàçìåùåíèå ñòàòåé íà ñàéòå
© 2010.