MFC怎么让图片适应picture control控件的大小

最近做项目时,遇到一个问题,想要让picture control中的图片显示与该控件的大小一致,用的环境是vs2008,添加一个控件后,更改其type为bitmap,此时的控件大小不能改变,需要将Center Image更改为True,此时即可更改控件的大小

将控件关联一个CStatic的变量m_ctrlPic后,可以在OnInitDialog中使用SetImage,此时的图片可以居中显示,但是大小被缩减了,然后在OnInitDialog中使用了StretchBlt发现图片显示一下就不见了,后来查了查,发现了问题所在,对话框显示的时候会先调用OnInitDialog,然后调用OnPaint,而OnPaint中的CDialog::OnPaint();当对话框 没有 WS_CLIPDRILDREN 属性CDialog::OnPaint(); 会给 pictrue 发 窗口无效 (invalidate),如果 这时 画 东西, 会 被 pic 的 paint 覆盖 掉.所以一定要让 pic 的 窗口 ,有效 后 才能 画.也就是说 先 要 pWnd->UpdateWindow();//或者:(pWnd->RedrawWindow())或者 pWnd->ValidateRect()使 窗口 有效.

void CUWB_CoordinateDlg::OnPaint()

{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文


SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);


// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;


// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}



UpdateWindow();
int height, width;
CRect rect;//定义矩形类
CRect rect1;
CImage image; //创建图片类
image.Load(_T("1.jpg"));
height = image.GetHeight();
width = image.GetWidth();


m_ctrlPic.GetClientRect(&rect); //获得pictrue控件所在的矩形区域
CDC *pDc = m_ctrlPic.GetDC();//获得pictrue控件的Dc
SetStretchBltMode(pDc->m_hDC,STRETCH_HALFTONE); 
image.StretchBlt(pDc->m_hDC,rect,SRCCOPY);
ReleaseDC(pDc);//释放picture控件的Dc

}



  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值