Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для Windows/Dos > обработка WM_COMMAND..


Автор: 0000 10.5.2007, 18:15
Надо просто реализовать окошко с кнопкой Exit...поскольку пользуемся стандартными API-функциями - получается примерно следующее:
(покажу тока то, где вопрос)
Код

    push 0
    push [HINST]
    push 0
    push 0
    push 400  
    push 400  
    push 100  
    push 100  
        push WS_OVERLAPPEDWINDOW
    push OFFSET TITLENAME
    push OFFSET CLASSNAME
    push 0
    CALL CreateWindowExA@48
    cmp eax, 0
    jz _ERR
    mov [NEWHWND], eax

        push 0
    push [HINST]
    push Button_ID
    push [NEWHWND]
    push 75
    push 70
    push 140
    push 25
    push WS_CHILD
         push OFFSET ButtonText
    push OFFSET ButtonClassName
    push 0    
    CALL CreateWindowExA@48
    cmp eax, 0
    jz _ERR
    mov [BUTTONHWND], eax

цикл обработки сообщений есть - там все нормуль....проверяем MESSAGE:
Код

    cmp DWORD PTR [ebp + 0ch], WM_COMMAND
    je WMCOMMAND

так отловили WM_COMMAND и далее уже начинаем сравнивать wparam, который находится [ebp + 10h]
но вот проблема - этот wparam может быть в двух регистрах... и как правильно его обработать, что у меня он совпадает с моим Button_ID  я пока не сооброжу...
просто в метке WMCOMMAND:  
я уж чего тока не делал - и все срабатывает....
Код

WMCOMMAND:
        cmp DWORD PTR [ebp + 10h], Button_ID
        je _err

_err у меня поставлена на выход...может кто объяснит как правильно обработать такое нажжатие кнопки..
Спасибо

Автор: anwe 10.5.2007, 23:17
Цитата(0000 @  10.5.2007,  18:15 Найти цитируемый пост)
этот wparam может быть в двух регистрах

В каких это двух? wParam размерности dword.
Для контролов: нижнее слово wParam - ID, верхнее - код уведомления.
Код

mov  eax,wParam
cmp ax,ButtonID

Автор: 0000 11.5.2007, 11:03
я асм не очень знаю...вообще предполагал, что при большом значении ButtonID wParam может находиться в двух регистрах...
теперь разобрался...сенкс

Автор: Mikl__ 30.5.2007, 12:29
0000, ID не может быть больше 65535 

Автор: drZmeu 1.6.2007, 09:13
День добрый =)
Попробуй так:
Код

   cmp DWORD PTR [ebp + 16ch], WM_COMMAND
    je WMCOMMAND

или

   cmp DWORD PTR [ebp + 16h], WM_COMMAND
    je WMCOMMAND

Точно не помню так как использую FASM и его макросы .if

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)