15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Как добавить битмапы в заголовок ListView.

Компилятор: C++ Builder

Для этого достаточно просто добавить в стиль заголовка ListView флаг HDF_BITMAP:

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)
 : TForm(Owner)
{
   
//Получаем дескриптор заголовка
    HWND HeaderHandle = GetDlgItem(ListView1->Handle, 0);

    //Структура элемента заголовка
    HD_ITEM hdi;

    for (int index = 0; index < ListView1->Columns->Count; index++)
    {
       
//Получаем текущий формат
        Header_GetItem(HeaderHandle, index, &hdi);

        hdi.mask = HDI_TEXT | HDI_FORMAT | HDI_BITMAP | HDI_WIDTH;

        //Флаги для битмапа
        hdi.fmt = hdi.fmt | HDF_LEFT | HDF_BITMAP | HDF_STRING;
        hdi.pszText = ListView1->Columns->Items[index]->Caption.c_str();
        hdi.cchTextMax = ListView1->Columns->Items[index]->Caption.Length();
        hdi.cxy = ListView1->Columns->Items[index]->Width;
       
        switch(index)
        {
            case 0: hdi.hbm = Image1->Picture->Bitmap->Handle;
                    break;
            default: hdi.hbm = Image2->Picture->Bitmap->Handle;
                     break;
        }

        //Применяем изменения
        Header_SetItem(HeaderHandle, index, &hdi);
    }

 

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