Создать свой контрол

Тема в разделе "WASM.BEGINNERS", создана пользователем OSMan, 10 ноя 2007.

  1. OSMan

    OSMan New Member

    Публикаций:
    0
    Регистрация:
    18 авг 2007
    Сообщения:
    23
    Как писать свой контрол?

    Код (Text):
    1. ; Структура с данными контрола
    2. CUSTOMCTRLSTRUCT struct
    3.     ; ...
    4. CUSTOMCTRLSTRUCT ends
    5.  
    6. ; Вызываем где-нибудь эту процедуру
    7. InitCustomCtrl proc hInst:DWORD
    8.     LOCAL   wc:WNDCLASSEX
    9.     mov wc.cbSize,sizeof wc
    10.     mov wc.lpszClassName,offset szCustomCtrl
    11.     m2m wc.hInstance,hInst
    12.     mov wc.lpfnWndProc,offset CustomCtrlWndProc
    13.     invoke  LoadCursor,hInst,IDC_ARROW
    14.     mov wc.hCursor,eax
    15.     mov wc.hIcon,0
    16.     mov wc.lpszMenuName,0
    17.     mov wc.hbrBackground,COLOR_BTNFACE
    18.     mov wc.style,0
    19.     mov wc.cbClsExtra,0
    20.     mov wc.cbWndExtra,0
    21.     mov wc.hIconSm,0
    22.     invoke  RegisterClassEx,addr wc
    23.     ret
    24. InitCustomCtrl endp
    Что нужно делать в сообщении WM_NCCREATE, чтоб она создала новую переменную типа CUSTOMCTRLSTRUCT (Структура с данными контрола) и чтоб во время WM_NCDESTROY она освободила память под эту переменную?
     
  2. OSMan

    OSMan New Member

    Публикаций:
    0
    Регистрация:
    18 авг 2007
    Сообщения:
    23
    Видел пример на Си, там это делалось так:
    Код (Text):
    1. switch(msg)
    2.     {
    3.     case WM_NCCREATE:        
    4.         // Allocate a new CustCtrl structure for this window.
    5.         ccp = malloc( sizeof(CustCtrl) );        
    6.         // Failed to allocate, stop window creation.
    7.         if(ccp == NULL) return FALSE;
    8. ...
    9.     case WM_NCDESTROY:
    10.         free(ccp);
    11.     }
    Как это осуществить в MASM?
     
  3. OSMan

    OSMan New Member

    Публикаций:
    0
    Регистрация:
    18 авг 2007
    Сообщения:
    23
  4. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    В общем ладно. Все молчат... хотя может они и правы. А я - новичек, поэтому сужу не строго.
    Ну как? WinAPI, конечно. Например VirtualAlloc/VirtualFree. Есть еще HeapCreate/HeapAlloc и иже с ними, но в Вашей задаче в них необходимости нету... если конечно 150 своих контролов создавать/удалять/пересоздавать не собираетесь. Остальные ф-ии работы с памятью (GlobalAlloc/LocalAlloc) вроде уже устарели.
    А вообще MSDN в таких случаях.
     
  5. OSMan

    OSMan New Member

    Публикаций:
    0
    Регистрация:
    18 авг 2007
    Сообщения:
    23
    Поэтому я выбрал WASM.BEGINNERS

    l_inc
    Огромное спасибо! Разобрался, все работает