Почему отображается текст на кнопке Toolbar

Тема в разделе "WASM.WIN32", создана пользователем redcat, 8 июн 2009.

  1. redcat

    redcat New Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    62
    Читаю MSDN:
    BTNS_SHOWTEXT
    Version 5.81. Specifies that button text should be displayed. All buttons can have text, but only those buttons with the BTNS_SHOWTEXT button style will display it. This button style must be used with the TBSTYLE_LIST style and the TBSTYLE_EX_MIXEDBUTTONS extended style. If you set text for buttons that do not have the BTNS_SHOWTEXT style, the toolbar control will automatically display it as a ToolTip when the cursor hovers over the button. This feature allows your application to avoid handling the TBN_GETINFOTIP notification for the toolbar.


    Из описания, как я понял, следует: если не устанавливать указанные флаги, но добавить текст, то подпись к кнопке не должна отображаться (она должна отображаться только как подсказка). Но у меня добавленный текст выводится на кнопке.


    В приложении включена поддержка визуальных стилей 6-й версии (манифест в ресурсах). Имею такой код (VC2003SP1):
    Код (Text):
    1. // Создаем окно панели инструментов
    2. HWND hWndToolbar;
    3. // Флаг TBSTYLE_EX_MIXEDBUTTONS и ни один из флагов TBSTYLE_FLAT или TBSTYLE_FLAT не устанавливаем!!!
    4. CreateWindowEx(0, TOOLBARCLASSNAME, NULL, WS_CHILD, 0, 0, 0, 0, hWndParent, (HMENU)ID_TOOLBAR, hInstance, 0);
    5.  
    6. // Создаем и наполняем список изображений из ресурса иконок для кнопок панели инструментов
    7. HIMAGELIST hImageList = ImageList_Create(32, 32, ILC_COLOR32 | ILC_MASK, 2, 0);
    8. HICON hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(ID_1));
    9. ImageList_AddIcon(hImageList, hIcon);
    10. hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(ID_2));
    11. ImageList_AddIcon(hImageList, hIcon)
    12. SendMessage(hWndToolbar, TB_SETIMAGELIST, (WPARAM)0, (LPARAM)hImageList)
    13.  
    14. // Добавляем на панель инструментов кнопки
    15. PTBBUTTON ptbButton[2] =
    16. {
    17.     // Флаг BTNS_SHOWTEXT не устанавливаем, но текст добавляем!!!
    18.     {0, ID_1, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, MAKEINTRESOURCE(ID_1)},
    19.     {1, ID_2, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, MAKEINTRESOURCE(ID_2)},
    20. }
    21. SendMessage(hWndToolbar, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), (LPARAM)0);
    22. SendMessage(hWndToolbar, TB_ADDBUTTONS, (WPARAM)(UINT)2, (LPARAM)(PTBBUTTON)&tbButton)
    23.  
    24. // Подгоняем размер и отображаем панель инструментов
    25. SendMessage(hWndToolbar, TB_AUTOSIZE, (WPARAM)0, (LPARAM)0);
    26. ShowWindow(hWndToolbar, SW_SHOW);
    Пробывал устанавливать флаги TBSTYLE_EX_MIXEDBUTTONS и TBSTYLE_FLAT для hWndToolbar, результат тот же.
     
  2. slavanap

    slavanap Вячеслав

    Публикаций:
    0
    Регистрация:
    10 сен 2008
    Сообщения:
    300
    Адрес:
    Смоленск, Россия
    Не там роешь.

    Код (Text):
    1.   rcToolButtons     LABEL       TBBUTTON
    2.     TBBUTTON  <STD_FILENEW, IM_CREATE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, nil>
    3.     TBBUTTON  <STD_FILEOPEN, IM_OPEN, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, nil>
    4.     TBBUTTON  <STD_FILESAVE, IM_SAVE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, nil>
    5.     TBBUTTON  <0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, nil>
    6.     TBBUTTON  <STD_PRINT, IM_PRINT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, nil>
    7.     TBBUTTON  <0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, nil>
    8.     TBBUTTON  <15+0, IM_PUPILS, TBSTATE_ENABLED or TBSTATE_CHECKED, TBSTYLE_CHECKGROUP, 0, 0, nil>
    9.     TBBUTTON  <15+1, IM_TEACHERS, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0, nil>
    10.     TBBUTTON  <0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, nil>
    11.     TBBUTTON  <15+2, IM_PLAN, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, nil>
    12.     TBBUTTON  <0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0, nil>
    13.     TBBUTTON  <15+3, IM_CREATERASP, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, nil>
    14.   cbToolButtons     =       $-rcToolButtons
    15.  
    16.   szToolClass       DB      "ToolbarWindow32",0
    17.  
    18.  
    19. ....
    20.  
    21.  
    22.       .IF EAX == WM_CREATE
    23.             m2m  hMain, Handle
    24.             PUSH EDI
    25.             INVOKE CreateWindowEx, 0, OFFSET szToolClass, nil,
    26.                 WS_CHILD or WS_VISIBLE or TBSTYLE_FLAT or TBSTYLE_TOOLTIPS or CCS_TOP,
    27.                 0, 0, 500, 40, Handle, 0, HInstance, nil
    28.             MOV  EDI, EAX
    29.             INVOKE SetWindowLong, EDI, GWL_ID, ID_TOOLBAR
    30.             INVOKE SendMessage, EDI, TB_BUTTONSTRUCTSIZE, SIZEOF TBBUTTON, 0
    31.             INVOKE SendMessage, EDI, TB_SETBITMAPSIZE, 0, 16 shl 16 + 16
    32.             PUSH IDB_STD_SMALL_COLOR                ; [TBADDBITMAP] .nID
    33.             PUSH HINST_COMMCTRL                 ; [TBADDBITMAP] .hInst
    34.             INVOKE SendMessage, EDI, TB_ADDBITMAP, 15, ESP
    35.             ADD  ESP, SIZEOF TBADDBITMAP
    36.             PUSH hToolImg                   ; [TBADDBITMAP] .nID
    37.             PUSH NULL                       ; [TBADDBITMAP] .hInst
    38.             INVOKE SendMessage, EDI, TB_ADDBITMAP, TOOL_BITMAPSCOUNT, ESP
    39.             ADD  ESP, SIZEOF TBADDBITMAP
    40.             INVOKE SendMessage, EDI, TB_SETBUTTONSIZE, 0, 22 shl 16 + 23
    41.             INVOKE SendMessage, EDI, TB_ADDBUTTONS, cbToolButtons / SIZEOF TBBUTTON, OFFSET rcToolButtons
    42.       .ELSEIF EAX == WM_NOTIFY
    43.             MOV  EAX, lParam
    44.             assume EAX: PTR TOOLTIPTEXT
    45.             .IF [EAX].hdr.code == TTN_NEEDTEXT
    46.                   m2m  [EAX].hinst, HInstance
    47.                   m2m  [EAX].lpszText, [EAX].hdr.idFrom
    48.             .ENDIF
    49.             assume EAX: nothing
    50.             XOR  EAX, EAX
    51.  
    52. ....
    В ресурсах нужно создать ресурс string (1 если строки с 1 по 15, 2 - если с 16 по 31, и т.д.)
    Номер строки соответствует первому параметру структуры.

    Вот хинт и готов :)
     
  3. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    Если можно по подробнее, я не совсем понял где ставить цифирь из скобок
    в ms sdk help не нашел