分享

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

 行走在理想边缘 2017-01-05

最近做项目时,遇到一个问题,想要让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

}



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多