WinAPI: табуляция, изображения и разрывы строк

Я использую дочернее окно с вкладками, чтобы показать результаты моей программы. На вкладках нет кнопок или других элементов управления, только текст и изображения. Однако до сих пор я мог только разместить текст без разрывов строки на вкладке.

Вот что я использую для создания окна вывода:

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);

Это возвращает дескриптор растрового изображения, которое я хотел бы показать. Сообщение об ошибке не появляется, но я не знаю, как разместить это изображение на своей вкладке. Что я могу сделать?

Я не уверен, что понимаю, чего вы пытаетесь достичь. Вы хотите разместить на вкладках многострочные заголовки вместе с изображениями? Кроме того, из вашего снимка экрана видно, что вы используете старые общие элементы управления. Вы можете использовать новые общие элементы управления включение визуальных стилей.

IInspectable 20.08.2018 00:25
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
49
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы можете преобразовать изображения в значки, это было бы простым способом справиться с этим. Большинство стандартных элементов управления (и, в частности, статический элемент управления) могут работать только со значками, а не с обычными растровыми изображениями.

Если это не вариант, вашим следующим лучшим выбором, вероятно, будет создание другого класса окна, экземпляры которого будут действовать как клиентская область управления вкладками. Затем этот класс будет отвечать за рисование растрового изображения и текста, которые вы хотите показать.

Статический элемент управления может нормально отображать обычные растровые изображения (см. STM_SETIMAGE).

IInspectable 18.08.2018 21:12

Растровые изображения работают отлично. Теперь я использую сообщение STM_SETIMAGE. Спасибо, что указали на это, Inspectable.

Mobatechnikblogger 21.08.2018 17:51
Ответ принят как подходящий

Я решил проблемы.

  • Разрывы строк: они были отключены, так как я использовал неправильный стиль окна. Теперь я использую SS_LEFT вместо SS_CENTER и SS_CENTERIMAGE.
  • Изображения: мне пришлось создать отдельные 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);
    }
    

Другие вопросы по теме