Sdílet prostřednictvím


Jak vložit ovládací prvky bez tlačítka do panelů nástrojů

Panely nástrojů podporují pouze tlačítka; proto pokud vaše aplikace vyžaduje jiný druh ovládacího prvku, musíte vytvořit podřízené okno. Následující obrázek znázorňuje panel nástrojů s vloženým ovládacím prvku pro úpravy.

snímek obrazovky dialogového okna s ovládacím prvku pro úpravy na panelu nástrojů, před třemi ikonami panelu nástrojů

Poznámka

Zvažte použití ovládacích prvků Rebar Controls místo ovládacích prvků v panelech nástrojů.

 

Jakýkoli typ okna lze umístit na panel nástrojů. Následující příklad kódu přidá ovládací prvek pro úpravy jako podřízený prvek okna panelu nástrojů. Vzhledem k tomu, že je vytvořen panel nástrojů a přidaný ovládací prvek pro úpravy, je nutné zadat místo pro ovládací prvek pro úpravy. Jedním ze způsobů, jak to udělat, je přidat oddělovač jako zástupný symbol na panelu nástrojů a nastavit šířku oddělovače na počet pixelů, které chcete rezervovat.

Co potřebujete vědět

Technologie

Požadavky

  • C/C++
  • Programování uživatelského rozhraní systému Windows

Instrukce

Vložení ovládacího prvku Nonbutton na panel nástrojů

Následující fragment kódu vytvoří panel nástrojů na předchozím obrázku.

// IDM_NEW, IDM_OPEN, and IDM_SAVE are application-defined command constants.

HIMAGELIST g_hImageList = NULL;

HWND CreateToolbarWithEdit(HWND hWndParent)
{
    const int ImageListID = 0;    // Define some constants.
    const int bitmapSize  = 16;
    
    const int cx_edit = 100;      // Dimensions of edit control.
    const int cy_edit = 35;  

    TBBUTTON tbButtons[] =        // Toolbar buttons.
    {
        // The separator is set to the width of the edit control. 
        
        {cx_edit, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, -1},
        {STD_FILENEW, IDM_NEW, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0},
        {STD_FILEOPEN, IDM_OPEN, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0},
        {STD_FILESAVE, IDM_SAVE, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0},
        {0, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, 0},
    };

    // Create the toolbar.
    HWND hWndToolbar = CreateWindowEx(0, TOOLBARCLASSNAME, L"Toolbar", 
                                      WS_CHILD | WS_VISIBLE | WS_BORDER, 
                                      0, 0, 0, 0,
                                      hWndParent, NULL, HINST_COMMCTRL, NULL);

    if (!hWndToolbar)
        return NULL;
    
    int numButtons = sizeof(tbButtons) / sizeof(TBBUTTON);

    // Create the image list.
    g_hImageList = ImageList_Create(bitmapSize, bitmapSize, // Dimensions of individual bitmaps.
                                    0,                      // Flags.
                                    numButtons, 0);

    // Set the image list.
    SendMessage(hWndToolbar, TB_SETIMAGELIST, (WPARAM)ImageListID, (LPARAM)g_hImageList);

    // Load the button images.
    SendMessage(hWndToolbar, TB_LOADIMAGES, (WPARAM)IDB_STD_SMALL_COLOR, (LPARAM)HINST_COMMCTRL);

    // Add buttons.
    SendMessage(hWndToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
    SendMessage(hWndToolbar, TB_ADDBUTTONS,       (WPARAM)numButtons,       (LPARAM)&tbButtons);

    // Create the edit control child window.    
    HWND hWndEdit = CreateWindowEx(0L, L"Edit", NULL, 
                                   WS_CHILD | WS_BORDER | WS_VISIBLE | ES_LEFT | ES_AUTOVSCROLL | ES_MULTILINE, 
                                   0, 0, cx_edit, cy_edit, 
                                   hWndToolbar, (HMENU) IDM_EDIT, g_hInst, 0 );
    
    if (!hWndEdit)
    {
        DestroyWindow(hWndToolbar);
        ImageList_Destroy(g_hImageList);
        
        return NULL;
    }
    
    return hWndToolbar;    // Return the toolbar with the embedded edit control.
}

Tento příklad pevně kóduje rozměry podřízeného okna; Pokud ale chcete vytvořit robustnější aplikaci, určete velikost panelu nástrojů a upravte okno ovládacího prvku tak, aby se vešel.

Možná budete chtít, aby oznámení editačního pole přešla do jiného okna, jako je rodičovské okno panelu nástrojů. Uděláte to tak, že vytvoříte ovládací prvek pro úpravy jako podřízený prvek nadřazeného okna panelu nástrojů. Potom změňte nadřazený prvek pro úpravy na panel nástrojů následujícím způsobem.

SetParent (hWndEdit, hWndToolbar);

Oznámení jsou odesílána původnímu nadřazenému rodiči. Zprávy upravovacího ovládacího prvku proto přejdou na nadřazené okno panelu nástrojů, i přestože se okno pro úpravy nachází v okně panelu nástrojů.

Použití ovládacích prvků panelu nástrojů

ukázka běžných ovládacích prvků Windows (CppWindowsCommonControls)