Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
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
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.
Tematy pokrewne