RegisterClass - вопрос теоритический

Тема в разделе "WASM.WIN32", создана пользователем dgs, 3 фев 2011.

  1. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Здравствуйте. Допустим делаем креатевиндув для контрола BUTTON на главном окне и надо мне что бы кнопочка обработала другое сообщение допустим WM_USER+3 я делаю

    Код (Text):
    1.         invoke  CreateWindowEx,0,<'BUTTON'>,<'btn'>,WS_CHILD+WS_VISIBLE,10,10,110,30,[hwnd],0,[hinstance],0
    2.         mov     [hbutton], eax
    3.         invoke  GetWindowLong, eax, GWL_WNDPROC
    4.         mov     [btnOldProc], eax
    5.         invoke  SetWindowLong, [hbutton], GWL_WNDPROC, ButtonProc
    Все хорошо, но если у меня 50 - 150 кнопок?! (Мне что везде свой обработчик ставить?) Или можно просто расширить контрол и зарегистрировать (RegisterClass) его в системе без использования COM?

    В сущности вопрос: возможно ли модифицировать окна и регистрировать их с помощью RegisterClass (Ex) на основе уже готовых решений, без использования COM?
     
  2. Blackbeam

    Blackbeam New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    960
    наврядли система позволит слелать суперклассинг буттона, а если получится, то это чревато...

    в масм32либ есть bmpbutton

    функцию можно прикрутить к коду и модифицировать её по своему усмотрению:
     
  3. Blackbeam

    Blackbeam New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    960
    если кнопок одного класса много, наверное желательно в секции WM_CREATE сделать регистрацию, а из самой функции её убрать
     
  4. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Суперклассинг определенного бутона сделать легко, но мне хотелось сделать почти то же самое, сейчас попробую обьяснить на вашем приведенном примере примере:

    1. У вас регистрируеться класс окна WinClass и начинает работать функция WinMain
    2. По сообщению WM_CREATE вызываеться функция BmpButtn
    3. В свою очередь она регистрирует класс Bmp_Button_Class - он "пуст" т.е. в процедуре обработки сообщений какие вы напишите обработчики, такие и будут работать
    4. Затем создаеться окно типа STATIC, но оно дочернее по отношению к нашему пустому классу и использует суперклассинг

    Я же хотел бы все тоже самое, но без создания "пустого компонента", а что бы к примеру Bmp_Button_Class уже имел готовые "унаследованные от BUTTON" обработчики сообщений, которые нужны для отображения компонента? Это возможно? Или я в делфях наигрался?))
     
  5. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Есть такая функция: SetClassLong.
     
  6. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Оконную процедуру может поменять и SetWindowLong, не вижу связи с поставленной задачей...