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. Т.е. как-будто картинки и нету.
Что тут не так?
Здравствуйте, 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 (пишу на память, для точности глянтье МСДВ).
Здравствуйте, 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);
}
}
Здравствуйте, 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; уничтожается, соотв. дерево ничего ен может отобразить. Сделай его членом класса или же просто глобальной переменной. И все будет работать
Здравствуйте, 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 года не программировал.
Совсем все тонкости С++ забыл, ну спасибо.