Я использую дочернее окно с вкладками, чтобы показать результаты моей программы. На вкладках нет кнопок или других элементов управления, только текст и изображения. Однако до сих пор я мог только разместить текст без разрывов строки на вкладке.
Вот что я использую для создания окна вывода:
LRESULT CALLBACK ChildProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
TCITEMW tie;
INITCOMMONCONTROLSEX icex;
switch(msg) {
case WM_CREATE:
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_TAB_CLASSES;
InitCommonControlsEx(&icex);
// Create tab control
hTab = CreateWindowW(WC_TABCONTROLW, NULL, WS_CHILD | WS_VISIBLE,
0, 0, X_FENSTER-15, Y_FENSTER-120, hWnd,(HMENU) ID_TABCTRL, NULL, NULL);
// Create 8 tabs
int i;
tie.mask = TCIF_TEXT;
for (i = 0; i < 8; i++){
// Set labels for tab
switch(i){
case 0: tie.pszText = L"Übersicht";
break;
case 1: tie.pszText = L"Einzel";
break;
case 2: tie.pszText = L"Topol. 1";
break;
case 3: tie.pszText = L"Topol. 2";
break;
case 4: tie.pszText = L"Topol. 3";
break;
case 5: tie.pszText = L"Topol. 4";
break;
case 6: tie.pszText = L"Topol. 5";
break;
case 7: tie.pszText = L"Topol. 6";
break;
}
// Create tab
SendMessageW(hTab, TCM_INSERTITEMW, (LRESULT)i, (LPARAM) (LPTCITEM) &tie);
// Receive string to write on tab
wchar_t puffer[ERGSTRING];
ausgabe(i - 1, puffer); // writes string to puffer
// Write string on tab
kartei[i] = CreateWindowExW(0, L"STATIC", puffer, WS_CHILD | WS_VISIBLE | SS_CENTER | SS_CENTERIMAGE , // control style
175, // x position
75, // y position
200, // control width
60, // control height
hTab, // parent control
(HMENU)i, // menu/ID info
hInst, // instance handler
NULL // no extra creation data
);
ShowWindow(kartei[i], SW_HIDE);
}
ShowWindow(kartei[0], SW_SHOW); // First tab to the foreground
// Create Button (BTN_CLOSE)
CreateWindowW(WC_BUTTONW, L"Schließen", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
80, Y_FENSTER - 90, 80, 30, hWnd, (HMENU) BTN_CLOSE, NULL, NULL);
break;
Результат выглядит так:
Однако я хотел бы отобразить несколько строк текста и добавить картинку. Я уже пытался загрузить растровое изображение, используя это:
HANDLE bmp7 = LoadImageA(hInst, MAKEINTRESOURCE (8002), 0, 0, 0, LR_DEFAULTCOLOR);
if (bmp7 == NULL) MessageBox(NULL, "Bitmap not loaded.", "Error!", MB_ICONEXCLAMATION | MB_OK);
Это возвращает дескриптор растрового изображения, которое я хотел бы показать. Сообщение об ошибке не появляется, но я не знаю, как разместить это изображение на своей вкладке. Что я могу сделать?





Если вы можете преобразовать изображения в значки, это было бы простым способом справиться с этим. Большинство стандартных элементов управления (и, в частности, статический элемент управления) могут работать только со значками, а не с обычными растровыми изображениями.
Если это не вариант, вашим следующим лучшим выбором, вероятно, будет создание другого класса окна, экземпляры которого будут действовать как клиентская область управления вкладками. Затем этот класс будет отвечать за рисование растрового изображения и текста, которые вы хотите показать.
Статический элемент управления может нормально отображать обычные растровые изображения (см. STM_SETIMAGE).
Растровые изображения работают отлично. Теперь я использую сообщение STM_SETIMAGE. Спасибо, что указали на это, Inspectable.
Я решил проблемы.
Изображения: мне пришлось создать отдельные HWND для изображений. Теперь я использую следующий код.
HANDLE topoBitmap = LoadImageA(hInst, MAKEINTRESOURCE (8000+i), 0, 0, 0, LR_DEFAULTCOLOR);
if (topoBitmap != NULL){
kartei[i+8] = CreateWindowExW(0, L"STATIC", puffer, WS_CHILD | WS_VISIBLE | SS_LEFT | SS_BITMAP,
20, 75, 100, 100, hTab, (HMENU)i, hInst, NULL);
SendMessage(kartei[i+8], STM_SETIMAGE, (WPARAM) IMAGE_BITMAP, (LPARAM) topoBitmap);
}
Я не уверен, что понимаю, чего вы пытаетесь достичь. Вы хотите разместить на вкладках многострочные заголовки вместе с изображениями? Кроме того, из вашего снимка экрана видно, что вы используете старые общие элементы управления. Вы можете использовать новые общие элементы управления включение визуальных стилей.