Новые книги

Сегодня мобильный маркетинг – один из наиболее эффективных инструментов повышения продаж. Большинство руководителей бизнеса и маркетологов «теоретически» это понимают, но не знают, как использовать этот новый инструмент на практике. Автор, эксперт в области мобильных технологий, директор и владелец цифрового рекламного агентства, развернуто и на множестве практических примеров показывает, как применить каждый конкретный инструмент мобильного маркетинга в разных сферах бизнеса. С их помощью компании могут повысить узнаваемость бренда и лояльность потребителей, вовлечь клиентов в коммуникацию с брендом, добиться максимально точного таргетинга и многократно усилить эффективность традиционных маркетинговых каналов. Книга предназначена для владельцев и руководителей бизнеса, сотрудников рекламных агентств и менеджеров по маркетингу.
Salix, первоначально носивший имя Salix OS (официальный сайт проекта) представляет собой один из дистрибутивов Linux, основанных на Slackware, старейшей из ныне живущих Linux-систем. От прародительницы он унаследовал простоту устройства и здоровый консерватизм, привнеся, однако, некоторые черты, свойственные так называемым «дружелюбным» (user friendly) дистрибутивам. Впрочем, как читатель увидит в дальнейшем, его «дружелюбие» никогда не становится навязчивым.

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

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