Вопрос о буфере и ф-ии SetClipboardViewer

Тема в разделе "WASM.WIN32", создана пользователем HPC, 20 ноя 2011.

  1. HPC

    HPC New Member

    Публикаций:
    0
    Регистрация:
    30 мар 2011
    Сообщения:
    37
    Всем привет!

    Не могу добавить своё окно в цепочку для отслеживания изменений в буфере обмена.
    Смысл я как-бы понял.Нужно заюзать SetClipboardViewer и
    в случае успеха мы получим хендл следующего окна в цепочки.
    Ну вот не поиму в какой момент нужно дергать эту функцию.
    Почитал сишные статьи,пишут что после сообщения WM_CREATE нужно заюзать SetClipboardViewer.

    Сделал.Загнал поглядеть в отладчик,там сообщение WM_CREATE срабатывает куеву тучу раз.
    Получается что и мое окно добавляется в цепочку тоже хз сколько раз.
    Не могу в общем понять как правильно использовать SetClipboardViewer и откуда,в какой момент её вызвать.

    Помогите разобраться.Вот мои не доделанный код:


    Код (Text):
    1.  format PE GUI 4.0
    2.   entry start
    3.   include 'win32a.inc'
    4.  
    5.  
    6.  start:
    7.  
    8.         invoke  GetModuleHandle,0
    9.  
    10.         invoke  DialogBoxParam,eax,IDR_DIALOG,HWND_DESKTOP,DialogProc,0
    11.  
    12.  exit:
    13.         invoke  ExitProcess,0
    14.  
    15.  
    16.  proc   DialogProc hwnddlg,msg,wparam,lparam
    17.  
    18.  
    19.         push    ebx esi edi
    20.  
    21.         cmp     [wparam],WM_CREATE
    22.         je      CREATE
    23.         cmp     [msg],WM_COMMAND
    24.         je      wmcommand
    25.         cmp     [msg],WM_DRAWCLIPBOARD
    26.         je      DRAWCLIPBOARD
    27.         xor     eax,eax
    28.         jmp     finish
    29.  
    30.  
    31.  CREATE :
    32.  
    33.         invoke  SetClipboardViewer,[hwnddlg]             ; добавляем окно в цепочку
    34.         mov     [nexth],eax                              ; хендл следующего окна
    35.         xor     eax,eax
    36.         jmp     finish
    37.  
    38.  
    39.  wmcommand:
    40.  
    41.         mov     eax,[wparam]
    42.         cmp     eax,IDCANCEL
    43.         je      wmclose
    44.         jmp     processed
    45.  
    46.  
    47.  DRAWCLIPBOARD:
    48.  
    49.        invoke   PostMessage,[nexth],[msg],[wparam],[lparam]
    50.  
    51.        jmp     processed
    52.  
    53.  wmclose:
    54.  
    55.         invoke  EndDialog,[hwnddlg],0
    56.  
    57.  processed:
    58.  
    59.         mov     eax,1
    60.  
    61.  finish:
    62.         pop     edi esi ebx
    63.         ret
    64.  
    65. endp
    66.  
    67.  
    68.   nexth           dd ?
    69.  
    70. section '.rsrc' resource data readable
    71.  
    72.   IDR_DIALOG       = 37
    73.   IDE              = 2
    74.  
    75.  
    76.   directory RT_DIALOG,dialogs
    77.  
    78.   resource dialogs,\
    79.            IDR_DIALOG,LANG_ENGLISH+SUBLANG_DEFAULT,main
    80.  
    81.   dialog main,'test',390,270,30,30,WS_CAPTION+WS_SYSMENU
    82.   dialogitem 'EDIT','',IDE,2,2,60,13,WS_VISIBLE+WS_TABSTOP+WS_BORDER
    83.  
    84.   enddialog
    85.  
    86.   section '.idata' import data readable writeable
    87.  library kernel32,'KERNEL32.DLL',\
    88.           user32,'USER32.DLL'
    89.  
    90.  
    91.   include 'api/kernel32.inc'
    92.   include 'api/user32.inc'
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Еще бы, если ловить не msg = WM_CREATE, а
    Мсдн нужно читать, с конкретными примерами
     
  3. HPC

    HPC New Member

    Публикаций:
    0
    Регистрация:
    30 мар 2011
    Сообщения:
    37
    leo
    В моем коде что выше, я именно так и делаю...

    Код (Text):
    1. cmp [wparam],WM_CREATE
    2.  je    CREATE
     
  4. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Ууу.
    cmp [msg],WM_CREATE
    je CREATE
     
  5. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Ну вот поэтому и получаешь "куеву тучу раз" ;)