Новые книги

65 % мирового ВВП сосредоточено всего в 600 городах. Филип Котлер, один из лучших экспертов по маркетингу в мире, и его брат Милтон, международный маркетинговый стратег, предлагают план действий, как лучше выбрать город для дальнейшего расширения бизнеса, подсказывают, на что стоит обратить внимание при открытии филиала, и рассказывают, почему выстраивание долгосрочных отношений с городскими властями принесет вам в будущем значительные преимущества.

Эту книгу должен прочесть каждый руководитель, который хочет обеспечить рост и расширение своего предприятия. Братья Котлер справедливо указывают на все более активную урбанизацию мировой экономики и на быстрый рост городов развивающихся стран как на две ключевые тенденции, которые президенты компаний должны учитывать, чтобы оставаться лидерами и процветать в новом веке.
C момента выхода первого издания в 1996 году книга "JavaScript: Подробное руководство" превратилась в библию программистов на JavaScript. За эти годы было издано более 500000 экземпляров, и веб-разработчики по-прежнему с восторгом отзываются о ней.

Эта книга - одновременно и руководство программиста, и полноценный справочник по базовому языку JavaScript и клиентским прикладным интерфейсам, предоставляемым веб-броузерами.

Общий вид ресурса меню:

MyMenu  MENU
{
  [menu list]
}
или
MyMenu  MENU
BEGIN
  [menu list]
END
Поле [menu list] может быть MENUITEM или POPUP. Синтаксис MENUITEM:
  MENUITEM "&text", ID [,options]
&text - название пункта меню, амперсанд ставится перед подчеркиваемым символом.
ID - уникальный идентификатор, будет передоваться процедуре окна(wparam), если этот пункт меню выберут.
Параметры options:
  GRAYED - Недоступный пункт меню, текст выводится серым цветом.
  INACTIVE - Тоже недоступный пункт меню, но текст нормальный.
  MENUBREAK - Этот пункт и следующие пункты появляются в новой строке меню.
  HELP - Пункт меню и следующие пункты выводятся в правой части строки меню.

Синтаксис POPUP:
POPUP "&text" [,options]
{
  [menu list]
}
MENUITEM SEPARATOR - разделитель для отделения элементов меню.
Далее при регистрации класса в поле clsLpszMenuName указать на строку с названием ресурса меню.
Пример:
-- Begin menu.rc --
#define IDM_1 1
#define IDM_2 2
#define IDM_EXIT 3
#define IDM_ABOUT 4
MENU_1 MENU
    BEGIN
      POPUP "File"
        BEGIN
             MENUITEM "MenuItem &GRAYED",  IDM_1, GRAYED
             MENUITEM "MenuItem &INACTIVE",  IDM_2, INACTIVE
             MENUITEM SEPARATOR
             MENUITEM "&Exit",  IDM_EXIT
        END
      MENUITEM "&About",  IDM_ABOUT
    END
-- End of menu.rc --

-- Begin cr_menu1.asm --
.386
.model flat, stdcall
include win32.inc

extrn            CreateWindowExA:PROC
extrn            DefWindowProcA:PROC
extrn            DispatchMessageA:PROC
extrn            ExitProcess:PROC
extrn            GetMessageA:PROC
extrn            GetModuleHandleA:PROC
extrn            LoadCursorA:PROC
extrn            LoadIconA:PROC
extrn            MessageBoxA:PROC
extrn            PostQuitMessage:PROC
extrn            RegisterClassA:PROC
extrn            ShowWindow:PROC
extrn            TranslateMessage:PROC
extrn            UpdateWindow:PROC

IDM_1     EQU 1
IDM_2     EQU 2
IDM_EXIT  EQU 3
IDM_ABOUT EQU 4

.data

newhwnd          dd 0
msg              MSGSTRUCT   
wc               WNDCLASS    

hInst            dd 0

szMenuName       db 'MENU_1', 0  <<название ресурса>>
szTitleName      db 'Win32 Assembly Program', 0
szClassName      db 'ASMCLASS32',0
mb_message       db 'Win32 Assembler: Menu',0
mb_title         db 'About',0

.code
;----------------------------------------------------------------------
start:

        push    0
        call    GetModuleHandleA        ; get hmod (in eax)
        mov     [hInst], eax            ; hInstance is same as HMODULE
                                        ; in the Win32 world
; initialize the WndClass structure
        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    IDI_APPLICATION
        push    0
        call    LoadIconA
        mov     [wc.clsHIcon], eax

        push    IDC_ARROW
        push    0
        call    LoadCursorA
        mov     [wc.clsHCursor], eax

        mov     [wc.clsHbrBackground], COLOR_WINDOW + 1
        mov     dword ptr [wc.clsLpszMenuName], offset szMenuName
        <<указываем смещение на строку с названием ресурса>>
        mov     dword ptr [wc.clsLpszClassName], offset szClassName

        push    offset wc
        call    RegisterClassA

        push    0                        ; lpParam
        push    [hInst]                  ; hInstance
        push    0                        ; menu
        push    0                        ; parent hwnd
        push    CW_USEDEFAULT            ; height
        push    CW_USEDEFAULT            ; width
        push    CW_USEDEFAULT            ; y
        push    CW_USEDEFAULT            ; x
        push    WS_OVERLAPPEDWINDOW      ; Style
        push    offset szTitleName       ; Title string
        push    offset szClassName       ; Class name
        push    0                        ; extra style

        call    CreateWindowExA

        mov     [newhwnd], eax

        push    SW_SHOWNORMAL
        push    [newhwnd]
        call    ShowWindow

        push    [newhwnd]
        call    UpdateWindow

msg_loop:
        push    0
        push    0
        push    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

        cmp     [wmsg], WM_DESTROY
        je      wmdestroy
        cmp     [wmsg], WM_COMMAND
        je      wmcommand

        push    [lparam]
        push    [wparam]
        push    [wmsg]
        push    [hwnd]
        call    DefWindowProcA
        jmp     finish

wmdestroy:
        push    0
        call    PostQuitMessage
        mov     eax, 0
        jmp     finish

wmcommand:
        mov     eax, [wparam]
        cmp     eax, IDM_ABOUT
        jne     wmnext
        push   0
        push   offset mb_title
        push   offset mb_message
        push   0
        call   MessageBoxA
wmnext:
        cmp     eax, IDM_EXIT
        je      wmdestroy

finish:
        ret
WndProc          endp
ends
end start
-- End of cr_menu1.asm --
Текст программы: cr_menu1.zip