Udostępnij przez


Jak osadzić elementy sterujące inne niż przyciski na paskach narzędzi

Paski narzędzi obsługują tylko przyciski; w związku z tym, jeśli aplikacja wymaga innego rodzaju kontrolki, musisz utworzyć okno podrzędne. Poniższa ilustracja przedstawia pasek narzędzi z osadzoną kontrolką edycji.

zrzut ekranu okna dialogowego z kontrolką edycji na pasku narzędzi, poprzedzając trzy ikony paska narzędzi

Notatka

Rozważ użycie kontrolek paska zamiast umieszczania kontrolek na paskach narzędzi.

 

Na pasku narzędzi można umieścić dowolny typ okna. Poniższy przykładowy kod dodaje kontrolkę edycji jako element podrzędny okna kontrolki paska narzędzi. Ponieważ pasek narzędzi jest tworzony, a następnie dodawana kontrolka edycji, musisz podać miejsce dla kontrolki edycji. Jednym ze sposobów jest dodanie separatora jako symbolu zastępczego na pasku narzędzi, ustawienie szerokości separatora na liczbę pikseli, które chcesz zarezerwować.

Co musisz wiedzieć

Technologie

  • kontrolek systemu Windows

Warunki wstępne

  • C/C++
  • Programowanie interfejsu użytkownika systemu Windows

Instrukcje

Osadzanie kontrolki nonbutton na pasku narzędzi

Poniższy fragment kodu tworzy pasek narzędzi na poprzedniej ilustracji.

// 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.
}

W tym przykładzie trwale koduje wymiary okna podrzędnego; Jednak aby zapewnić bardziej niezawodną aplikację, określ rozmiar paska narzędzi i dostosuj okno kontrolki edycji.

Możesz chcieć, aby powiadomienia dotyczące kontrolki edycji przechodziły do innego okna, takiego jak element nadrzędny paska narzędzi. W tym celu utwórz kontrolkę edycji jako element podrzędny okna nadrzędnego paska narzędzi. Następnie zmień element nadrzędny kontrolki edycji na pasek narzędzi w następujący sposób.

SetParent (hWndEdit, hWndToolbar);

Powiadomienia są wysyłane do oryginalnego rodzica. W związku z tym komunikaty kontrolne edytora są kierowane do rodzica paska narzędzi, mimo że okno edycji znajduje się w oknie paska narzędzi.

przy użyciu kontrolek paska narzędzi

pokaz wspólnych kontrolek systemu Windows (CppWindowsCommonControls)