Добавить диалоговое окно панели инструментов с Win32 API - PullRequest
0 голосов
/ 24 декабря 2009

У меня есть диалоговое окно, в котором элементы управления добавляются с помощью редактора ресурсов. Но я пытаюсь создать панель инструментов на лету в сообщении WM_INITGDIALOG, но панель инструментов не видна. Есть ли что-то еще, чтобы сделать это видимым (я так не думаю, но ...). Если это невозможно, как добавить панель инструментов в редактор ресурсов.

Как вы уже догадались, я использую VS 2008.

CreateButtons(HWND hwnd)
{
    HIMAGELIST m_hTBImageList;
    HIMAGELIST m_hTBHottrack;



    HWND hwndSysButtonTB = CreateWindowEx(0,
        TOOLBARCLASSNAME, 
        _T(""), 
        WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT | TBSTYLE_TOOLTIPS | CCS_NORESIZE | CCS_NOPARENTALIGN,
        toolbarRect.left, toolbarRect.top, toolbarRect.right-toolbarRect.left, toolbarRect.bottom-toolbarRect.top, 
        hwnd,
        (HMENU)IDR_TOOLBAR, 
        (HINSTANCE)hAppInstance, 
        NULL);

    m_hTBImageList = ImageList_LoadImage((HINSTANCE)hAppInstance, 
        MAKEINTRESOURCE(IDB_BITMAP_ICONS), toolbarButtonSize.cx, 1, 
        0, IMAGE_BITMAP, LR_CREATEDIBSECTION|LR_SHARED);
    m_hTBHottrack  = ImageList_LoadImage((HINSTANCE)hAppInstance, 
        MAKEINTRESOURCE(IDB_MOUSEOVER), toolbarButtonSize.cx, 1, 
        0, IMAGE_BITMAP, LR_CREATEDIBSECTION|LR_SHARED);

    SendMessage(hwndSysButtonTB, (UINT) TB_SETIMAGELIST, 0, (LPARAM)m_hTBImageList);
    SendMessage(hwndSysButtonTB, (UINT) TB_SETHOTIMAGELIST, 0, (LPARAM)m_hTBHottrack);
    SendMessage(hwndSysButtonTB, (UINT) TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);

    // win2k: set color of hot tracking frame
    COLORSCHEME scheme;
    scheme.dwSize = sizeof(scheme);
    scheme.clrBtnHighlight = RGB(175,175,175);
    scheme.clrBtnShadow = RGB(175,175,175);
    SendMessage(hwndSysButtonTB, (UINT) TB_SETCOLORSCHEME, 0, (LPARAM)&scheme);

    TBBUTTON ButtonEnd =            {0,ID_BUTTON_END,TBSTATE_ENABLED,TBSTYLE_BUTTON};
    TBBUTTON ButtonRefresh =        {1,ID_BUTTON_REFRESH,TBSTATE_ENABLED,TBSTYLE_BUTTON};
    TBBUTTON ButtonOptions =        {2,ID_BUTTON_PROPERTIES,TBSTATE_ENABLED,TBSTYLE_BUTTON};



    SendMessage(hwndSysButtonTB, (UINT) TB_ADDBUTTONS, 1, (LPARAM)&ButtonEnd);
    SendMessage(hwndSysButtonTB, (UINT) TB_ADDBUTTONS, 1, (LPARAM)&ButtonRefresh);
    SendMessage(hwndSysButtonTB, (UINT) TB_ADDBUTTONS, 1, (LPARAM)&ButtonOptions);

} 

1 Ответ

0 голосов
/ 24 декабря 2009

Вы должны позвонить

SendMessage(hwndSysButtonTB, TB_AUTOSIZE, 0, 0); 
ShowWindow(hwndSysButtonTB , SW_SHOW); 

в конце вашей функции.

И я думаю, что вы должны использовать массив TBBUTTON вместо трех отдельных переменных. Затем вы можете добавить их все сразу с помощью

SendMessage(hwndSysButtonTB, (UINT) TB_ADDBUTTONS, 3, (LPARAM)&ButtonArray);
...