各位老大帮我看看下面的程序问题出在那里,高分送。
为什么图片显示不了呢?程序如下请各位老大指点。
m_ImageList.Create(74,30,ILC_COLOR24,0,2);
int size = 64;
CBitmap bitmap,bit;
BITMAP bm;
bitmap.LoadBitmap(IDB_BITMAP1);
bitmap.Attach(LoadImage(NULL,"D:\\test\\bmp\\1.bmp",IMAGE_BITMAP,NULL,NULL,LR_LOADFROMFILE|LR_DEFAULTCOLOR|LR_DEFAULTSIZE));
bitmap.GetObject(sizeof(bm), &bm);
CDC speicherDC;
speicherDC.CreateCompatibleDC(GetDC());
speicherDC.SelectObject(&bitmap);
CDC BmpDC;
BmpDC.CreateCompatibleDC(GetDC());
bit.CreateCompatibleBitmap(GetDC(),size,size);
BmpDC.SelectObject(&bit);
BmpDC.SetStretchBltMode(HALFTONE);
::SetBrushOrgEx(BmpDC.m_hDC ,0,0,NULL);
BmpDC.StretchBlt(0, 0,size,size,&speicherDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
m_ImageList.Add(&bit, RGB(0,0,0));
m_ImageList.Add(&bit, RGB(0,0,0));
m_ListCtrl.SetImageList(&m_ImageList,LVSIL_SMALL);
for(int index = 0;index<4;index++)
{
LVITEM li;
li.iItem=index;
li.mask= LVIF_IMAGE;
li.iSubItem=0;
li.iImage = index;
int iItem=m_ListCtrl.InsertItem(&li);
m_ListCtrl.SetItemText(index,1,"name");
}
问题点数:100、回复次数:12Top
1 楼laolaoliu2002(老刘----狂热的热爱人民币)回复于 2003-05-01 14:42:43 得分 0
上面的程序贴错了程序如下:
m_ImageList.Create(74,30,ILC_COLOR24,0,2);
int size = 64;
CBitmap bitmap,bit;
BITMAP bm;
bitmap.Attach(LoadImage(NULL,"D:\\test\\bmp\\1.bmp",IMAGE_BITMAP,NULL,NULL,LR_LOADFROMFILE|LR_DEFAULTCOLOR|LR_DEFAULTSIZE));
bitmap.GetObject(sizeof(bm), &bm);
CDC speicherDC;
speicherDC.CreateCompatibleDC(GetDC());
speicherDC.SelectObject(&bitmap);
CDC BmpDC;
BmpDC.CreateCompatibleDC(GetDC());
bit.CreateCompatibleBitmap(GetDC(),size,size);
BmpDC.SelectObject(&bit);
BmpDC.SetStretchBltMode(HALFTONE);
::SetBrushOrgEx(BmpDC.m_hDC ,0,0,NULL);
BmpDC.StretchBlt(0, 0,size,size,&speicherDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
m_ImageList.Add(&bit, RGB(0,0,0));
m_ImageList.Add(&bit, RGB(0,0,0));
m_ListCtrl.SetImageList(&m_ImageList,LVSIL_SMALL);
for(int index = 0;index<4;index++)
{
LVITEM li;
li.iItem=index;
li.mask= LVIF_IMAGE;
li.iSubItem=0;
li.iImage = index;
int iItem=m_ListCtrl.InsertItem(&li);
m_ListCtrl.SetItemText(index,1,"name");
}
Top
2 楼rogerfz(我是天才,天生蠢才)回复于 2003-05-01 17:54:10 得分 0
你是不是想要贴位图啊,如果是,应该是这样:
CClientDC dc(this);
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP2);
CDC *pmemdc=new CDC;
pmemdc->CreateCompatibleDC(&dc);
pmemdc->SelectObject(&bitmap);
dc.BitBlt(637,26,784,307,pmemdc,0,0,SRCCOPY);
delete pmemdc;Top
3 楼robertxiao(我心飞翔)回复于 2003-05-01 18:06:18 得分 0
你的int iItem=m_ListCtrl.InsertItem(&li);忘了把图插进去
应该是int iItem=m_ListCtrl.InsertItem(&li, m_imageList);
后面还应在加一句m_ListCtrl.SetReDraw(TRUE);进行刷新
Top
4 楼laolaoliu2002(老刘----狂热的热爱人民币)回复于 2003-05-01 19:54:20 得分 0
没有人能看出来错在那里吗?
robertxiao(翔) 你说的方法不行。Top
5 楼laolaoliu2002(老刘----狂热的热爱人民币)回复于 2003-05-01 19:57:09 得分 0
我自己来顶一下。Top
6 楼laolaoliu2002(老刘----狂热的热爱人民币)回复于 2003-05-01 19:57:25 得分 0
我自己来顶一下。Top
7 楼KcSoft(猎鹰魔法)回复于 2003-05-01 20:04:07 得分 0
可能是要在画背景的函数返回NULL。Top
8 楼laolaoliu2002(老刘----狂热的热爱人民币)回复于 2003-05-01 20:09:49 得分 0
能说的详细一些吗?Top
9 楼Mackz(在相互)回复于 2003-05-01 20:39:22 得分 50
试试:
......
CDC speicherDC;
CDC *pDC=GetDC();
speicherDC.CreateCompatibleDC(pDC);
CBitmap *pOldBitmap = speicherDC.SelectObject(&bitmap);
CDC BmpDC;
BmpDC.CreateCompatibleDC(pDC);
bit.CreateCompatibleBitmap(pDC,size,size);
ReleaseDC(pDC);
CBitmap *pOldBmp = BmpDC.SelectObject(&bit);
BmpDC.SetStretchBltMode(HALFTONE);
::SetBrushOrgEx(BmpDC.m_hDC ,0,0,NULL);
BmpDC.StretchBlt(0, 0,size,size,&speicherDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
speicherDC.SelectObject(pOldBitmap);
speicherDC.DeleteDC();
bitmap.DeleteObject();
BmpDC.SelectObject(pOldBmp);
BmpDC.DeleteDC();
m_ImageList.Add(&bit, RGB(0,0,0));
m_ImageList.Add(&bit, RGB(0,0,0));
bit.DeleteObject();
m_ListCtrl.SetImageList(&m_ImageList,LVSIL_SMALL);
for(int index = 0;index<4;index++)
{
LVITEM li;
li.iItem=index;
li.mask= LVIF_IMAGE;
li.iSubItem=0;
li.iImage = index % 2;
int iItem=m_ListCtrl.InsertItem(&li);
m_ListCtrl.SetItemText(iItem,0,"name");
}
Top
10 楼In355Hz(好象一条狗)回复于 2003-05-01 21:24:34 得分 50
1.创建的 CImageList 尺寸(74,30)好像和 Add 的 Image(64,64) 不一致,如果 CImageList 尺寸为(64,64), Image 可以是(n*64,64)
2.检查一下 LoadImage 是否成功
LoadImage(NULL, _T("D:\\test\\bmp\\1.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
3.你的 ListCtrl 是 report, list, small icon 还是 large icon ? ListCtrl 拥有两个 ImageList 分别包含 large icon 和 small icon, 你应该根据 ListCtrl 显示方式的不同设置不同的 ImageList。如果你的 ListCtrl 需要在不同显示方式下切换,需要同时设置两个 ImageList 并且保证各自包含的图标一一对应
m_ListCtrl.SetImageList(&m_ImageList, LVSIL_NORMAL);
此外保存 large icon 和 small icon 的 ImageList 尺寸应该和 GetSystemMetrics 通过
SM_CXICON/SM_CXICON,SM_CXSMICON/SM_CYSMICON 取得的尺寸一致,通常 large icon 是 (32,32) small icon 是 (16,16)
4. 这一段代码可以简化成
for(int index = 0; index < 4; index++)
{
m_ListCtrl.InsertItem(index, _T("name"), nImage);
}
Top
11 楼laolaoliu2002(老刘----狂热的热爱人民币)回复于 2003-05-01 21:48:56 得分 0
谢谢各位,问题已经解决,CImageList 尺寸(74,30)和 Add 的 Image(64,64) 不一致所以没有显示,我将其中的size,size分别改为70和30就显示图片了,好了,揭帖。Top




