在单文档页面上加一幅图片之后, 由于我的图片太大, 插入之后只能显示图片的一部分, 怎样让图片缩小到合理的尺寸呢?我的插入图片方法如下:
1.首先准备好一张美丽的图片,保存为BMP格式。2.新建一个工程,命名为:test ,在资源编辑里用Import导入刚才准备好的位图文件.ID为IDB_BITMAP
如果位图是大于16色的,会出现无法显示的提示。不要紧,这并不影响程序最终的显示。3.代码实现:
3.1 我们为CTestView类添加一个变量 CBrush m_brushBackground;这个画刷就是用于画背景的。
3.2 我们在CTestView的构造函数中加入如下代码:
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP); ///加载位图
m_brushBackground.CreatePatternBrush(&bmp); ///创建位图画刷 3.3 接着我们需要在OnDraw函数中画出来,代码如下:
CRect rect;
GetClientRect(rect);///取得客户区域
pDC->FillRect(rect,&m_brushBackground); ///用背景画刷填充区域
3.4 为了避免背景的闪烁,使显示更加完美,我们添加WM_ERASEBKGND消息的处理函数,并取消调用父类的处理函数,代码
BOOL CTestView::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}插入之后只能显示图片的一部分, 怎样让图片缩小到合理的尺寸呢?
感谢各位大哥的帮忙, 谢谢!
1.首先准备好一张美丽的图片,保存为BMP格式。2.新建一个工程,命名为:test ,在资源编辑里用Import导入刚才准备好的位图文件.ID为IDB_BITMAP
如果位图是大于16色的,会出现无法显示的提示。不要紧,这并不影响程序最终的显示。3.代码实现:
3.1 我们为CTestView类添加一个变量 CBrush m_brushBackground;这个画刷就是用于画背景的。
3.2 我们在CTestView的构造函数中加入如下代码:
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP); ///加载位图
m_brushBackground.CreatePatternBrush(&bmp); ///创建位图画刷 3.3 接着我们需要在OnDraw函数中画出来,代码如下:
CRect rect;
GetClientRect(rect);///取得客户区域
pDC->FillRect(rect,&m_brushBackground); ///用背景画刷填充区域
3.4 为了避免背景的闪烁,使显示更加完美,我们添加WM_ERASEBKGND消息的处理函数,并取消调用父类的处理函数,代码
BOOL CTestView::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}插入之后只能显示图片的一部分, 怎样让图片缩小到合理的尺寸呢?
感谢各位大哥的帮忙, 谢谢!
StretchBlt 应该写在什么地方? 参数应该如何设置?
谢谢你的帮助
CDC mem;
mem.CreateCompatibleDC(NULL);
CBitmap *oldbit=mem.SelectObject(&bmp);
BITMAP bm;
bmp.GetBitmap(&bm);
CRect rect;
GetClientRect(rect);///取得客户区域
CDC *pDC;
pDC->StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&mem,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
mem.SelectObject(oldbit);
mem.DeleteDC();
3.2里m_brushBackground.CreatePatternBrush(&bmp); ///创建位图画刷
不要
但我试了你的程序, 这是一个截屏幕图的程序, 而我想要的是加入一幅 IDB_BITMAP
谢谢
CBitmap *oldbit=mem.SelectObject(&bmp); mem就是你的IDB_BITMAP 图的内存DC再用内存DC显示的显示屏上~~~~
当前屏幕是什么, CTextView就显示什么..
CDC mem;
mem.CreateCompatibleDC(NULL);
CBitmap *oldbit=mem.SelectObject(&bmp);
BITMAP bm;
bmp.GetBitmap(&bm);
CRect rect;
GetClientRect(rect);///取得客户区域
CDC *pDC;
pDC-> StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&mem,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
mem.SelectObject(oldbit);
mem.DeleteDC();
一定是你没有画在这里,再呢BOOL CTestView::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
} 返回 true了,所以就等于没有画,当然就是后面的图了
mem.CreateCompatibleDC(NULL);
CBitmap *oldbit=mem.SelectObject(&bmp);
BITMAP bm;
bmp.GetBitmap(&bm);
CRect rect;
GetClientRect(rect); //取得客户区域
CDC *pDC; //在这里出错: redefinition of formal parameter 'pDC'
pDC->StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&mem,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
mem.SelectObject(oldbit);
mem.DeleteDC();我编译之后出现了以下错误提示:
D:\C++ Project\Text\Text.cpp(95) : error C2082: redefinition of formal parameter 'pDC'结果我就以为是 CDC *pDC 重新定义了, 所以我把 CDC *pDC 改成: CDC *pDC2
改之后的代码如下:CDC mem;
mem.CreateCompatibleDC(NULL);
CBitmap *oldbit=mem.SelectObject(&bmp);
BITMAP bm;
bmp.GetBitmap(&bm);
CRect rect;
GetClientRect(rect); //取得客户区域
CDC *pDC2; //在这里出错: redefinition of formal parameter 'pDC'
pDC2->StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&mem,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
mem.SelectObject(oldbit);
mem.DeleteDC();可能就是因为我把 CDC *pDC 改成: CDC *pDC2的原因而导致显示当前屏幕的图像, 但如果我不这样做的话应该怎样改呢?
还请帮帮忙, 非常感谢!
CDC *pDC; //在这里出错: redefinition of formal parameter 'pDC '
删了```