我的图片怎么不能正确显示呢?

lu64 2004-01-14 12:21:23
我想将IDB_BITMAP1作为一个个对象存入一个列表当中,点击鼠标左键一下显示IDB_BITMAP1,如果再点,平移(100,100)再显示一幅IDB_BITMAP1。。。依次类推。我的代码基本是这样的,怎么只能在列表中读入一个对象,显示一幅图片呢?
class CPic:public CObject
{CObList m_Array; CBitmap m_bm;
BOOL DrawPic(CDC *pDC);
}
BOOL CPic::DrawPic(CDC*pDC)
{for( int i=0;i<m_Array.GetCount;i++)
{m_bm.LoadBitmap(IDB_BITMAP1);
CDC MemDC;MemDC.Creat........
.....
pDC->Bitblt(100*i,100*i,.......,SRCCOPY);
MemDC.SelectObject(pOldBitmap);
reture true;
}
}
...全文
97 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kitfox AI 2004-01-16
  • 打赏
  • 举报
回复
//画出整个链表中的所有图
void CBMPDlg::Draw()
{
list<BMP>::iterator begin,end;
begin=m_BMPList.begin();
end=m_BMPList.end();
for(;begin!=end;begin++)
{
BMP bmp=*begin;
DrawBMP(bmp.x,bmp.y,bmp.hBitMap);
}
}

//画出一个位图
void CBMPDlg::DrawBMP(int x, int y, HBITMAP hBitMap)
{
CDC dcMem;
CClientDC m_dc(this);
HBITMAP hbmpOld;
CRect m_Rect(0,0,600,600);//设定位图的作区
// 显示位图的实际大小.
hbmpOld=(HBITMAP)LoadImage(0,m_Path,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE);
// 若要设定位图的高和宽(m_ImgH,m_ImgW)则用下面的语句
// hbmpOld=(HBITMAP)LoadImage(0,m_ImgPath,IMAGE_BITMAP,m_ImgH,m_ImgW,LR_LOADFROMFILE);
dcMem.CreateCompatibleDC(&m_dc);
hbmpOld=(HBITMAP)dcMem.SelectObject(hBitMap);
m_dc.BitBlt(x+15,y+85,m_Rect.Width(),m_Rect.Height(),&dcMem,0,0,SRCCOPY);
dcMem.SelectObject(hbmpOld);
dcMem.DeleteDC();
}
Kitfox AI 2004-01-16
  • 打赏
  • 举报
回复
//位图存储结构
typedef struct tagBMP
{
int x;
int y;
HBITMAP hBitMap;
}BMP,*LPBMP;
//链表
list<BMP> m_BMPList;
//添加
void CBMPDlg::OnAdd()
{
UpdateData(true);
BMP NewBMP;
NewBMP.x=m_x;
NewBMP.y=m_y;
NewBMP.hBitMap=(HBITMAP)LoadImage(0,m_Path,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE);
m_BMPList.push_back(NewBMP);
Draw();
}
Kitfox AI 2004-01-16
  • 打赏
  • 举报
回复
留个mail,我把我刚做的代码发给你。
lu64 2004-01-16
  • 打赏
  • 举报
回复
m_pStrokeCur->m_pointArray.AddTail(&b[k]);
这一行写错了,应该是m_pCur->m_Array.AddTail(&b[k]);
taianmonkey 2004-01-16
  • 打赏
  • 举报
回复
能发过代码来吗?
cong119@sohu.com
lu64 2004-01-16
  • 打赏
  • 举报
回复
to: wangjinwang(王进)
我照你方法把CBitmap定义成一个全局数组,还是没把CBitmap对象一个个保存到m_Array中,还是不能正确显示。你帮我看看,我是这么修改的,DrawPic()如下:
CMyDoc::CMyDoc() {for(int j=0;j<10;j++)
{b[j].LoadBitmap(IDB_BITMAP1); }

OnLButtonDown(..)
{.....
static int k=0;
if(k<10)
{m_pStrokeCur->m_pointArray.AddTail(&b[k]);
k++;}
...}

CPic类中定义的CBitmap m_bm;
BOOL CPic::DrawPic(CDC* pDC)
{ for(int i=0;i<m_Array.GetCount();i++);
{
m_bm.LoadBitmap(IDB_BITMAP1);
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = MemDC.SelectObject(&m_bm);
BITMAP bm;
m_bm.GetObject(sizeof(BITMAP),&bm);
pDC->BitBlt(100*i,100*i,bm.bmWidth,bm.bmHeight,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldBitmap);
m_bm.DeleteObject();
}
} 谢谢了
lu64 2004-01-16
  • 打赏
  • 举报
回复
我不只是仅仅想显示位图,还想把位图储存为一列表方便后面使用
Kitfox AI 2004-01-16
  • 打赏
  • 举报
回复
把你的意图说清楚。如果是同一位图多次显示,并且显示位移量是一至的话,那我上面的那段代码应该可以满足你要求。如果是在不同位图显示不同位图的话,就需要存储位图的资料和显示的坐标。
lu64 2004-01-16
  • 打赏
  • 举报
回复
jianglu64@163.com 谢谢了
aben456 2004-01-15
  • 打赏
  • 举报
回复
如果你想重复使用CDC,BITMAP,建议在头文件里面定义它们
Kitfox AI 2004-01-15
  • 打赏
  • 举报
回复
以下代码测试通过,绝对可行.
void CBMPTestDlg::DrawBMP(CString m_Path, LONG m_Count)
{
CDC dcMem;
CClientDC m_dc(this);
HBITMAP hbmpOld;
CRect m_Rect(0,0,600,600);//设定位图的作区
// 显示位图的实际大小.
hbmpOld=(HBITMAP)LoadImage(0,m_Path,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE);
// 若要设定位图的高和宽(m_ImgH,m_ImgW)则用下面的语句
// hbmpOld=(HBITMAP)LoadImage(0,m_ImgPath,IMAGE_BITMAP,m_ImgH,m_ImgW,LR_LOADFROMFILE);
dcMem.CreateCompatibleDC(&m_dc);
hbmpOld=(HBITMAP)dcMem.SelectObject(hbmpOld);
for(int i=0;i<m_Count;i++)
m_dc.BitBlt(0+i*100,0+i*100,m_Rect.Width(),m_Rect.Height(),&dcMem,0,0,SRCCOPY);
dcMem.SelectObject(hbmpOld);
}
孤必有邻 2004-01-15
  • 打赏
  • 举报
回复
你的这段代码应该有问题
CBitmap b;
b.LoadBitmap(IDB_BITMAP1);
m_pCur->m_Array.AddTail(&b);
m_pCur->DrawPic(pDC);
对象b是一个局部对象,当函数返回后,对象存储资源自动释放,使你加入到m_Array中的位图指针作废。试着将CBitmap定义成一个全局或成员数组看看。
platinum15 2004-01-15
  • 打赏
  • 举报
回复
up
数据的世界 2004-01-15
  • 打赏
  • 举报
回复
读入一个对象, 只读入一次就行了啊, 然后在不同的地方显示不行吗?
sxslyy 2004-01-15
  • 打赏
  • 举报
回复
m_bm.LoadBitmap(IDB_BITMAP1);
这句的IDB_BITMAP1只代表一个位图ID.
你试试每个图一个ID
或用imagelist
lu64 2004-01-14
  • 打赏
  • 举报
回复

class CMyDoc
{public:CTypedPtrList <CObList ,CPic*> m_list;
CPic *NewPic();
}
CPic* CMyDoc::NewPic()
{CPic *pItem=new CPic;
m_list.AddTail(pItem);
SetModifiedFlag();
return pItem;}

class CMyView
{public:CPic* m_pCur;}
void CMyView::OnLButtonDown(..,..)
{CMyDoc *pDoc=GetDocument();
CDC *pDC=GetDC();
m_pCur=pDoc->NewPic();
CBitmap b;
b.LoadBitmap(IDB_BITMAP1);
m_pCur->m_Array.AddTail(&b);
m_pCur->DrawPic(pDC);
return;
}
fcs20031228 2004-01-14
  • 打赏
  • 举报
回复
up
shootingstars 2004-01-14
  • 打赏
  • 举报
回复
帮你UP
fbmsf 2004-01-14
  • 打赏
  • 举报
回复
应该用到imagelist吧。
lu64 2004-01-14
  • 打赏
  • 举报
回复
怎么没有人帮忙呀
加载更多回复(1)

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧