CTreeControl не отображает рисунки
От: Minimaxus Россия  
Дата: 25.06.05 20:38
Оценка:
1) есть следующий код:

    CImageList il;
    il.Create(IDB_BITMAP1, 24, 2, RGB(255,0,255));

    m_tree.SetImageList(&il, TVSIL_NORMAL);
    m_tree.InsertItem("maza",1,1);

Я его в инициализации диалога вставил.
Здесь IDB_BITMAP1 — это ресурс Bitmap, который имеет размер 48*16. Т.е. первая строка вроде как 2 рисунка должна выделить.
m_tree — указатель на CTreeControl
Запускаю приложение и вижу мой диалог бокс с TreeControl. В TreeControl видно отступы в 24 пикселя (ну типа на глаз так), но все мои рисунки — это просто белый фон контрола.
Чиатю вроде бы все с МСДН.МИКРОСОФТА и не могу понять почему не работает как надо.

2) Еще я просто пробовал загрузить IDB_BITMAP1 как CBitmap и добавить его в CImageList. Ошибок нет, но когда я получаю свойства Битмапа следующим способом:
        BITMAP infoBMP;
    bm.GetBitmap(&infoBMP);

то в поле LPVOID bmBits; вижу указатеь на NULL. Т.е. как-будто картинки и нету.
Что тут не так?
Re: CTreeControl не отображает рисунки
От: Аноним  
Дата: 26.06.05 12:44
Оценка:
Здравствуйте, Minimaxus, Вы писали:

M>1) есть следующий код:

M>

M>    CImageList il;
M>    il.Create(IDB_BITMAP1, 24, 2, RGB(255,0,255));

M>    m_tree.SetImageList(&il, TVSIL_NORMAL);
M>    m_tree.InsertItem("maza",1,1);

M>

M>Я его в инициализации диалога вставил.
M>Здесь IDB_BITMAP1 — это ресурс Bitmap, который имеет размер 48*16. Т.е. первая строка вроде как 2 рисунка должна выделить.
M>m_tree — указатель на CTreeControl
M>Запускаю приложение и вижу мой диалог бокс с TreeControl. В TreeControl видно отступы в 24 пикселя (ну типа на глаз так), но все мои рисунки — это просто белый фон контрола.
M>Чиатю вроде бы все с МСДН.МИКРОСОФТА и не могу понять почему не работает как надо.

M>2) Еще я просто пробовал загрузить IDB_BITMAP1 как CBitmap и добавить его в CImageList. Ошибок нет, но когда я получаю свойства Битмапа следующим способом:

M>
M>        BITMAP infoBMP;
M>    bm.GetBitmap(&infoBMP);
M>

M>то в поле LPVOID bmBits; вижу указатеь на NULL. Т.е. как-будто картинки и нету.
M>Что тут не так?

насколько я помню в функции CImageList.Create нужно указывать размеры создаваемых битмапов, в Вашем случае будет 48 на 16. Во вторых попробуйте айтем вставлять через TVITEMMINSERT структуру, указав в поле TVITEM ключ IMAGEINDEX (пишу на память, для точности глянтье МСДВ).
Re: CTreeControl не отображает рисунки
От: Logot Украина  
Дата: 26.06.05 23:07
Оценка:
Здравствуйте, Minimaxus, Вы писали:

M>1) есть следующий код:

M>

M>    CImageList il;
M>    il.Create(IDB_BITMAP1, 24, 2, RGB(255,0,255));

M>    m_tree.SetImageList(&il, TVSIL_NORMAL);
M>    m_tree.InsertItem("maza",1,1);

M>

M>Я его в инициализации диалога вставил.
M>Здесь IDB_BITMAP1 — это ресурс Bitmap, который имеет размер 48*16. Т.е. первая строка вроде как 2 рисунка должна выделить.
M>m_tree — указатель на CTreeControl
M>Запускаю приложение и вижу мой диалог бокс с TreeControl. В TreeControl видно отступы в 24 пикселя (ну типа на глаз так), но все мои рисунки — это просто белый фон контрола.
M>Чиатю вроде бы все с МСДН.МИКРОСОФТА и не могу понять почему не работает как надо.

M>2) Еще я просто пробовал загрузить IDB_BITMAP1 как CBitmap и добавить его в CImageList. Ошибок нет, но когда я получаю свойства Битмапа следующим способом:

M>
M>        BITMAP infoBMP;
M>    bm.GetBitmap(&infoBMP);
M>

M>то в поле LPVOID bmBits; вижу указатеь на NULL. Т.е. как-будто картинки и нету.
M>Что тут не так?

Вот примерно такой код, думаю поможет!
void CLeftView::OnInitialUpdate()
{
CView::OnInitialUpdate();
CRect rect;
this->GetClientRect(&rect);
m_Tree.Create(WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_HSCROLL|WS_VSCROLL|TVS_HASLINES|TVS_HASBUTTONS|
TVS_LINESATROOT,rect,this,IDC_LEFTTREE);
m_Image.Create(IDB_MYBITMAP,16,3,RGB(255,0,255));//IDB_MYBITMAP — ID ресурса,16 — отсекатель ширины картинки в 16 бит
m_Tree.SetImageList(&m_Image,TVSIL_NORMAL);
FillTreeInLeftView();
}

void CLeftView::FillTreeInLeftView()
{
TVINSERTSTRUCT tvs;
tvs.hParent=NULL;
tvs.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
tvs.item.iImage=0;//закрытая папка
tvs.item.iSelectedImage=1;//картинка при выделениии, в ресурсе IDB_MYBITMAP 2-ая по счёту, у меня значок открытой папки
tvs.item.pszText="Root";
HTREEITEM hRoot=m_Tree.InsertItem(&tvs);
for(short i=0;i<10;i++)
{
tvs.hParent=hRoot;
tvs.item.iImage=2;//значок файла
tvs.item.iSelectedImage=3;//значок выделеного файла
tvs.item.pszText="Child";
m_Tree.InsertItem(&tvs);
}

}
Re: CTreeControl не отображает рисунки
От: SkyKnight Швейцария https://github.com/dmitrigrigoriev/
Дата: 27.06.05 08:31
Оценка: 3 (1)
Здравствуйте, Minimaxus, Вы писали:

M>1) есть следующий код:

M>

M>    CImageList il;
M>    il.Create(IDB_BITMAP1, 24, 2, RGB(255,0,255));

M>    m_tree.SetImageList(&il, TVSIL_NORMAL);
M>    m_tree.InsertItem("maza",1,1);

M>

M>Я его в инициализации диалога вставил.
M>Здесь IDB_BITMAP1 — это ресурс Bitmap, который имеет размер 48*16. Т.е. первая строка вроде как 2 рисунка должна выделить.
M>m_tree — указатель на CTreeControl
M>Запускаю приложение и вижу мой диалог бокс с TreeControl. В TreeControl видно отступы в 24 пикселя (ну типа на глаз так), но все мои рисунки — это просто белый фон контрола.
M>Чиатю вроде бы все с МСДН.МИКРОСОФТА и не могу понять почему не работает как надо.
объект класса CImageList не должен уничтожаться пока он используется. А у тебя при выходе из функции CImageList li; уничтожается, соотв. дерево ничего ен может отобразить. Сделай его членом класса или же просто глобальной переменной. И все будет работать
github.com/dmitrigrigoriev/
Re[2]: CTreeControl не отображает рисунки
От: Minimaxus Россия  
Дата: 28.06.05 00:46
Оценка:
Здравствуйте, SkyKnight, Вы писали:

SK>Здравствуйте, Minimaxus, Вы писали:


M>>1) есть следующий код:

M>>

M>>    CImageList il;
M>>    il.Create(IDB_BITMAP1, 24, 2, RGB(255,0,255));

M>>    m_tree.SetImageList(&il, TVSIL_NORMAL);
M>>    m_tree.InsertItem("maza",1,1);

M>>

M>>Я его в инициализации диалога вставил.
M>>Здесь IDB_BITMAP1 — это ресурс Bitmap, который имеет размер 48*16. Т.е. первая строка вроде как 2 рисунка должна выделить.
M>>m_tree — указатель на CTreeControl
M>>Запускаю приложение и вижу мой диалог бокс с TreeControl. В TreeControl видно отступы в 24 пикселя (ну типа на глаз так), но все мои рисунки — это просто белый фон контрола.
M>>Чиатю вроде бы все с МСДН.МИКРОСОФТА и не могу понять почему не работает как надо.
SK>объект класса CImageList не должен уничтожаться пока он используется. А у тебя при выходе из функции CImageList li; уничтожается, соотв. дерево ничего ен может отобразить. Сделай его членом класса или же просто глобальной переменной. И все будет работать
Вот это да, вот что значит 2 года не программировал.
Совсем все тонкости С++ забыл, ну спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.