给程序,盼解答:ClonePt类:
Bitmap *ClonePt::getClonePt()
{
Bitmap *ClonePt;
Rect block=Rect(PtPoint.x,PtPoint.y, PtSize.x,PtSize.y);
ClonePt=LargerPt->Clone(block,PixelFormatDontCare);
return ClonePt;}void ClonePt::initClonePt(Bitmap *LargerBitmap,CPoint BitmapSize,CPoint pointPt)
{
LargerPt=LargerBitmap;
PtSize=BitmapSize;
PtPoint=pointPt;
}
CDialog类:void CMyClonePtDlg::按钮单击事件()
{
// TODO: Add your control notification handler code here
CDC *dc=GetDC();
Bitmap Larger=(L"507.bmp");
Graphics graphics(dc->m_hDC); Bitmap*smallPt;
CPoint Size(100,100);
CPoint Position(60,60);
ClonePt *Pt=new ClonePt;
Pt->initClonePt(&Larger,Size,Position);
smallPt=Pt->getClonePt();
graphics.DrawImage(smallPt,100,100); //能运行,到下面就不行了
SetTimer(1,500,NULL);
}
运行上面程序后&Larger为:0x0023a450void CMyClonePtDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
Graphics graphics(dc->m_hDC);
Bitmap *smallPt;
smallPt=Pt->getClonePt(); //不能运行,因为Pt的Larger变了啊
graphics.DrawImage(smallPt,100,100); CDialog::OnTimer(nIDEvent);
}
运行上面程序后&Larger为:0x00000001;Larger是Pt对象的一个public 对象指针
为什么Larger变了啊,没其他线程来改变啊
Bitmap *ClonePt::getClonePt()
{
Bitmap *ClonePt;
Rect block=Rect(PtPoint.x,PtPoint.y, PtSize.x,PtSize.y);
ClonePt=LargerPt->Clone(block,PixelFormatDontCare);
return ClonePt;}void ClonePt::initClonePt(Bitmap *LargerBitmap,CPoint BitmapSize,CPoint pointPt)
{
LargerPt=LargerBitmap;
PtSize=BitmapSize;
PtPoint=pointPt;
}
CDialog类:void CMyClonePtDlg::按钮单击事件()
{
// TODO: Add your control notification handler code here
CDC *dc=GetDC();
Bitmap Larger=(L"507.bmp");
Graphics graphics(dc->m_hDC); Bitmap*smallPt;
CPoint Size(100,100);
CPoint Position(60,60);
ClonePt *Pt=new ClonePt;
Pt->initClonePt(&Larger,Size,Position);
smallPt=Pt->getClonePt();
graphics.DrawImage(smallPt,100,100); //能运行,到下面就不行了
SetTimer(1,500,NULL);
}
运行上面程序后&Larger为:0x0023a450void CMyClonePtDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
Graphics graphics(dc->m_hDC);
Bitmap *smallPt;
smallPt=Pt->getClonePt(); //不能运行,因为Pt的Larger变了啊
graphics.DrawImage(smallPt,100,100); CDialog::OnTimer(nIDEvent);
}
运行上面程序后&Larger为:0x00000001;Larger是Pt对象的一个public 对象指针
为什么Larger变了啊,没其他线程来改变啊
解决方案 »
- 多文档多视图切换闪烁的问题!
- VS2008下CMFCOutlookbar 标签切换消息的问题
- 大量数据插入SQL数据库问题,急急急!!!!!!
- 如何限制光标在某个窗体中,就是固定在某个区域,不让起移出去?
- 关于Edit Control
- 程序退出时杀不死该进程,CPU占用率高达99%。原因在哪?
- 请问哪有《Windows 95 系统程式设计 大奥秘》的源码下载
- 请问大家都是用什么东东看的电子书
- VC绘图问题
- 小弟要写图像细化方面的论文,哪位大哥有这方面的资料吗?
- 帮我看这个简单问题!(解决了20分)
- 我做了一个从系统剪切板读取信息的小程序,但是在日文系统下拷贝汉字时出现乱码,我知道是字库不支持,怎么解决呢?没有这方面的经验……
Bitmap Larger=(L"507.bmp");
对于单击事件来说,这个Larger是存在的,而在initClonePt函数里,是一个指针赋值而不是内存传递
这时候你的Pt对象里Larger指向了一块局部的内存,当单击函数完成后,这块内存被释放了,你的指针就没了,SO