subclassing SysTabControl32

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

  1. RDMess

    RDMess Member

    Публикаций:
    0
    Регистрация:
    28 дек 2009
    Сообщения:
    51
    Здравствуйте.

    Меня интересует технология создания "нестандартной закладки" например таких как на рисунке который находится ниже. Зацепившись за места отмеченные стрелками можно перетащить окно, сложно как то выглядит но красиво :)
    Объясните хотя бы в теории как нечто подобное сделать ?



    [​IMG]






    Если у Вас есть примеры сабклассинга Таб Контрола буду очень признателен если поделитесь.

    Спасибо за внимание.
     
  2. RDMess

    RDMess Member

    Публикаций:
    0
    Регистрация:
    28 дек 2009
    Сообщения:
    51
    Даже в интернете исходников не найти по этой теме, может быть этот вовсе не сабклассинг ? а новый компонент ?)
     
  3. RDMess

    RDMess Member

    Публикаций:
    0
    Регистрация:
    28 дек 2009
    Сообщения:
    51
    Ладно будем разбираться, кстати вопрос такой, как заставить рисоваться дочерние элементы Таб контрола ?

    Код (Text):
    1. TabControl32WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
    2.       LOCAL hDC :DWORD
    3.       LOCAL hBmp:DWORD
    4.       LOCAL rc:DWORD
    5.        .IF uMsg==WM_CREATE
    6.            ;INVOKE MessageBox,0,0,0,0
    7.        ;.ELSEIF uMsg==WM_NCPAINT
    8.            ;INVOKE MessageBox,0,0,0,0
    9.            
    10.        .ELSEIF uMsg==WM_PAINT
    11.            INVOKE ValidateRect,hWnd,NULL
    12.            INVOKE GetClientRect,hWnd,ADDR rc
    13.            INVOKE GetDC,hWnd
    14.            XCHG EDI,EAX
    15.            INVOKE DrawFocusRect,EDI,ADDR rc
    16.            INVOKE CallWindowProc,OldTabControl32WndProc,hWnd,WM_ERASEBKGND,EDI,lParam
    17.            INVOKE CallWindowProc,OldTabControl32WndProc,hWnd,WM_PRINTCLIENT,EDI,PRF_CLIENT
    18.            INVOKE ReleaseDC,hWnd,EDI
    19.            ;RET
    20.        .ELSE
    21.            INVOKE CallWindowProc,OldTabControl32WndProc,hWnd,uMsg,wParam,lParam
    22.            RET
    23.        .ENDIF
    24.        XOR EAX,EAX
    25.       RET
    26.     TabControl32WndProc endp
    Этот код не рсует дочерние элементы находящиеся на Таб Контрол-е.. Про WS_CLIPCHILDREN знаю, но хотелось бы по другому.
    Спасибо за внимание
     
  4. mansurv

    mansurv New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2009
    Сообщения:
    38
    Если устроит на си то здесь http://lookanet.com/download/Tabbed/zip исходничек не мой, я только хостю.
     
  5. RDMess

    RDMess Member

    Публикаций:
    0
    Регистрация:
    28 дек 2009
    Сообщения:
    51
    Устроит но "Not Found
    The requested URL /download/Tabbed/zip was not found on this server."
    Будемс ждать пока Вы появитесь в сети :)
     
  6. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    RDMess, насколько я понимаю, это достигается путём написания собственного обработчика WM_NCHITTEST и проверки попадания указателя мыши сначала в прямоугольник, ограничивающий все вкладки, а потом в трапециевидный регион для каждой вкладки.
    Если есть попадание в прямоугольник, но нет попадания в трапеции — значит, отдаём HTCAPTION, иначе HTCLIENT.
     
  7. RDMess

    RDMess Member

    Публикаций:
    0
    Регистрация:
    28 дек 2009
    Сообщения:
    51
    Спасибо, будем пробовать!!!!
    А в принципе по такой технологии можно же реализовать перерисовку статуса(как в вин ХР, при наведении рамка оранжевая но без манифестов и для более ранних версий виндов) компонентов при наведении курсора на него ?
     
  8. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    можно
     
  9. mansurv

    mansurv New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2009
    Сообщения:
    38
  10. RDMess

    RDMess Member

    Публикаций:
    0
    Регистрация:
    28 дек 2009
    Сообщения:
    51
    Если б это не написал возможно и догадался бы)) Спасибо!!!
    А про исходник я имел в виду не много другое, как рисовать детей в WM_PAINT родителя(данном случае TabControl-a)
     
  11. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Каждое окно имеет свой обработчик WM_PAINT.
    Так что дети рисуют себя и родители то же самое.
    Если рисовать всё из одного обработчика - могут быть трудно-фиксируемые проблемы.
     
  12. RDMess

    RDMess Member

    Публикаций:
    0
    Регистрация:
    28 дек 2009
    Сообщения:
    51
    Т.е. если у родителя не поставить стиль WS_CLIPCHILDREN то он и закрашивает детей?
    А почему тогда если не сабклассить Таб Контрол и не ставить стиль WS_CLIPCHILDREN то дети рисуются нормально ? я запутался.
     
  13. RDMess

    RDMess Member

    Публикаций:
    0
    Регистрация:
    28 дек 2009
    Сообщения:
    51
    Здравствуйте дорогие друзья, объясните пожалуйста разницу между сообщениями WM_PRINT и WM_PRINTCLIENT.

    Неужели она только в том что обработчик второго сообщения обязан прорисовывать полностью и в нем не может быть BeginPaint & EndPaint ?