c++让图片在固定picture控件中自动缩放适应大小!已有代码在dialog上,如何放在picture控件中

lookingdog 2010-10-14 10:10:27
我的情况如下:我有一张bmp位图,很大像素很宽。需要自适应我dialog的大小,自动缩小或者扩大放在dialog里面显示出来

这个自动缩小放大我已经做出来了。如下面代码。现在问题是要放到dialog中的picture控件中。不然整个dialog都被遮住了!请求各位大哥帮我看下下面代码,如何改动。picture控件id为:idd_picture.

我做的步骤如下。经测试,成功的。如何改动放到picrute中?
1 首先建立一个基于对话框的程序,在rc资源里面加入位图1:IDB_BITMAP1
2 其次在onpaint函数里面加入以下代码即可
经测试,可以显示位图,而且可以按照对话框的大小自动调节。但是我需要吧图片放到picture控件中,请各位大哥帮忙指点如何改动?
CBitmap bmp;
if (bmp.LoadBitmap(IDB_BITMAP1))
{
BITMAP bmpInfo;
bmp.GetBitmap(&bmpInfo);
CDC dcMemory;
CDC* pDC=GetWindowDC();
dcMemory.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = dcMemory.SelectObject(&bmp);
CRect rect;
GetClientRect(&rect);
int nX = rect.left + (rect.Width() - bmpInfo.bmWidth) / 2;
int nY = rect.top + (rect.Height() - bmpInfo.bmHeight) / 2;
pDC->BitBlt(nX, nY, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMemory,
0, 0, SRCCOPY);
dcMemory.SelectObject(pOldBitmap);
ReleaseDC(pDC);
}
...全文
1196 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fw19861127 2011-10-12
  • 打赏
  • 举报
回复
学习中。。。。谢谢
zcc_guoguo 2011-07-08
  • 打赏
  • 举报
回复
谢谢!我也参看了
lookingdog 2010-10-14
  • 打赏
  • 举报
回复
哈哈,搞定了,谢谢,70分献上!
zzz_zou 2010-10-14
  • 打赏
  • 举报
回复
CBitmap bmp;
if (bmp.LoadBitmap(IDB_BITMAP1))
{
BITMAP bmpInfo;
bmp.GetBitmap(&bmpInfo);
CDC dcMemory;
CDC* pDC=GetDlgItem(idd_picture)->GetDC();
dcMemory.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = dcMemory.SelectObject(&bmp);
CRect rect;
GetDlgItem(idd_picture)->GetClientRect(&rect);
int nX = rect.left + (rect.Width() - bmpInfo.bmWidth) / 2; //没看懂什么用- -
int nY = rect.top + (rect.Height() - bmpInfo.bmHeight) / 2;
//pDC->BitBlt(0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMemory, 0, 0, SRCCOPY);
pDC->SetStretchBltMode(COLORONCOLOR);
pDC->StretchBlt(0, 0,rect.Width(),rect.Height(),&dcMemory,0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight,SRCCOPY);
dcMemory.SelectObject(pOldBitmap);
ReleaseDC(pDC);
}
lookingdog 2010-10-14
  • 打赏
  • 举报
回复
能帮我吧代码改全么?就是我第3楼贴出来的代码,帮我改动显示到picture控件中去,给个详细代码吧!
我就是这块不熟悉。!麻烦大哥了!
zzz_zou 2010-10-14
  • 打赏
  • 举报
回复
dc也要修改成picture的DC
lookingdog 2010-10-14
  • 打赏
  • 举报
回复
不好意思,我代码贴错了,是下面这个代码,我要求放到dialog中的picture控件中,如何修改?
StretchBlt是根据目标大小放大缩小

// TODO: Add your message handler code here
CBitmap bmp;
if (bmp.LoadBitmap(IDB_BITMAP1))
{
BITMAP bmpInfo;
bmp.GetBitmap(&bmpInfo);
CDC dcMemory;
CDC* pDC=GetWindowDC();
dcMemory.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = dcMemory.SelectObject(&bmp);
CRect rect;
GetClientRect(&rect);
int nX = rect.left + (rect.Width() - bmpInfo.bmWidth) / 2;
int nY = rect.top + (rect.Height() - bmpInfo.bmHeight) / 2;
//pDC->BitBlt(0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMemory, 0, 0, SRCCOPY);
pDC->SetStretchBltMode(COLORONCOLOR);
pDC->StretchBlt(0, 0,rect.Width(),rect.Height(),&dcMemory,0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight,SRCCOPY);
dcMemory.SelectObject(pOldBitmap);
ReleaseDC(pDC);
}
zzz_zou 2010-10-14
  • 打赏
  • 举报
回复
bitblt改成 StretchBlt 就好了

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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